Control Hierarchy และ Fan-in กับ Fan-out คือ อะไร ?

คำนี้ผมเพิ่งได้ยินจากจากการเรียนปริญญาโทครับ โดยในคาบเรียบอาจารย์ให้แบ่งกลุ่ม และลองศึกษา Keyword ต่างๆ ประมาณ 20 นาที แล้วมานำเสนอครับ ของกลุ่มผมมี 3 คำครับ (เดี๋ยวมาอธิบายต่อไปเลย)

  • Control Hierarchy
  • Fan-in
  • Fan-out

Control Hierarchy คือ อะไร ?

เป็นแผนภาพที่แสดงโครงสร้างของระบบ โดยมองในมุมของ Components (ผมเข้าใจว่ามองลงได้ถึงในระดับ Class/Method ได้นะ) ว่ามี Components มีความสัมพันธ์กับ Module อื่นๆ อย่างไร

จากแผนภาพตรงนี้ เรามาค้นหาความสัมพันธ์ที่ซ่อนในโครงสร้างนี้กัน

  • Depth - ความลึกของ Control Hierarchy (เอาที่ลึกที่สุด)
    • ถ้าจากรูป Depth = 5 (ไม่นับ root)
  • Width - ความกว้างของ Control Hierarchy (เอาที่กว้างที่สุด)
    • ถ้าจากรูป Width= 8
  • Superordinate - Component ที่เราสนใจมีอิทธิพลกับ Component อื่นๆมากแค่ไหน
    • ถ้าจากรูป Component C มีอิทธิพลกับ Component I, J, K, M, N, O, P
  • Subordinate - Component ถูกครอบงำจาก Component อื่นๆ
    • ถ้าจากรูป Component R ถูกครอบงำโดย Component E, F
  • Fan-in & Fan-out
  • Structure

Fan-in & Fan-out คือ อะไร ?

- ความหมาย
  • Fan-out: Component ที่เราสนใจ มีลูกน้องที่ต้องดูแลกี่ Components
    ถ้าจากรูป Component C มี Fan-out = 6
  • Fan-in: Component ที่เราสนใจ ถูกครอบงำ(มีหัวหน้า) กี่ Components
    ถ้าจากรูป Component P มี Fan-in = 4
- ทำไมต้องมาดู Fan-in & Fan-out หละ

ให้ Code มัน Maintain ได้ง่ายไง

  • Fan-in
    • ถ้าในมุมของ OOP มันแสดงถึงว่า ตัว Subordinate มีการใช้ความสามารถบางอย่างมาจาก Superordinate
    • มุมของการเขียน Code ทั่วไป เราอาจจะแยก Business Logic (เช่น การคิดเงินแบบขั้นบันไดพวก เงินฝาก เงินกู้ ภาษี มีแนวคิดขั้นบันไดเหมือนกัน) ที่สำคัญมารวมที่ Component เดียว แล้วให้คนอื่น เรียกใช้งาน มองว่าเป็น Helper ก็ได้นะ
  • Fan-out มองว่า ถ้าเราต้องไปแก้ Superordinate มันมีผลกระทบไปยังลูกน้องมากแค่ไหน
- แล้วที่ดี คือ อะไร ?

ส่วนใหญ่จะเน้น High fan-in & Low fan-out

Structure Type

พอเราดูสิ่งที่ค้นพบจาก Control Hierarchy ต่อมาเป็นการจัดการโครงสร้างกัน ว่าเราจะบริหารแบบไหน

  • Horizontal
  • Vertical

สำหรับผมมองว่าเรื่อง Control Hierarchy + Fan-in & Fan-out เป็นตัวช่วยหนึ่งที่ทำให้เราไม่ออกแบบระบบ โดยไปยึดติดกับ Keyword ต่างๆ จากมากเกินไปครับ เช่น Coupling หรือ Cohesion

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.