นอกจากนี้ฉันเขียนสิ่งนี้เพื่อตอบคำถามของdallin (ตอนนี้ปิด) แต่ฉันก็ยังรู้สึกว่ามันจะมีประโยชน์กับคนที่นี่
ฉันคิดว่าเหตุผลของฟังก์ชั่น atomising คือ 2 เท่าและเนื่องจาก @jozefg กล่าวถึงนั้นขึ้นอยู่กับภาษาที่ใช้
การแยกความกังวล
เหตุผลหลักในการทำเช่นนี้คือการแยกชิ้นส่วนของรหัสที่ต่างกันดังนั้นบล็อกของโค้ดที่ไม่ได้ส่งผลโดยตรงต่อผลลัพธ์ / ความตั้งใจของฟังก์ชั่นที่ต้องการนั้นเป็นข้อกังวลแยกต่างหากและสามารถดึงออกมาได้
สมมติว่าคุณมีงานเบื้องหลังที่อัปเดตแถบความคืบหน้าการอัปเดตแถบความคืบหน้าไม่เกี่ยวข้องโดยตรงกับงานที่ใช้เวลานานดังนั้นจึงควรถูกแยกออกแม้ว่าจะเป็นรหัสชิ้นเดียวเท่านั้นที่ใช้แถบความคืบหน้า
พูดใน JavaScript คุณมีฟังก์ชั่น getMyData () ซึ่ง 1) สร้างข้อความสบู่จากพารามิเตอร์ 2) เริ่มต้นการอ้างอิงบริการ 3) เรียกใช้บริการที่มีข้อความสบู่ 4) แยกผล 5) ผลตอบแทน ดูเหมือนว่าสมเหตุสมผลฉันได้เขียนฟังก์ชันตรงนี้หลายครั้ง แต่จริงๆแล้วสามารถแบ่งออกเป็น 3 ฟังก์ชั่นส่วนตัวเท่านั้นรวมถึงรหัสสำหรับ 3 และ 5 (ถ้านั้น) เพราะไม่มีรหัสอื่นใดที่รับผิดชอบโดยตรงในการรับข้อมูลจากบริการ .
ปรับปรุงประสบการณ์การดีบัก
หากคุณมีฟังก์ชั่นอะตอมมิกอย่างสมบูรณ์การติดตามสแต็กของคุณจะกลายเป็นรายการงานแสดงรายการโค้ดที่ดำเนินการเรียบร้อยแล้วทั้งหมดเช่น:
- รับข้อมูลของฉัน
- การอ้างอิงบริการเบื้องต้น
- แยกการตอบสนองบริการ - ข้อผิดพลาด
จะจัดสรรให้น่าสนใจยิ่งขึ้นจากนั้นพบว่ามีข้อผิดพลาดขณะรับข้อมูล แต่เครื่องมือบางอย่างมีประโยชน์มากยิ่งขึ้นสำหรับการดีบักต้นไม้รายละเอียดการโทรแล้วที่ใช้เช่นไมโครซอฟท์ดีบักเกอร์ผ้าใบ
ฉันยังเข้าใจถึงข้อกังวลของคุณว่าการติดตามโค้ดที่เขียนด้วยวิธีนี้ทำได้ยากเพราะในตอนท้ายของวันคุณจำเป็นต้องเลือกคำสั่งของฟังก์ชั่นในไฟล์เดียวซึ่งต้นไม้สายของคุณจะซับซ้อนกว่านั้น . แต่ถ้าฟังก์ชั่นมีชื่อที่ดี (Intellisense ช่วยให้ฉันสามารถใช้คำตัวพิมพ์คาลล่า 3-4 คำในฟังก์ชั่นใดก็ได้ที่ฉันต้องการโดยไม่ทำให้ฉันช้าลง) และโครงสร้างที่มีส่วนต่อประสานสาธารณะที่ด้านบนของไฟล์รหัสของคุณจะอ่านเหมือน เป็นวิธีที่ง่ายที่สุดในการทำความเข้าใจกับ codebase ในระดับสูง
FYI - นี่คือหนึ่งในสิ่งที่ "ทำตามที่ฉันบอกไม่ใช่อย่างที่ฉันทำ" การทำให้รหัสอะตอมไม่มีจุดหมายเว้นแต่คุณจะสอดคล้องกับมันอย่างโหดเหี้ยม IMHO ซึ่งฉันไม่ชอบ