คำนี้ผมเพิ่งได้ยินจากจากการเรียนปริญญาโทครับ โดยในคาบเรียบอาจารย์ให้แบ่งกลุ่ม และลองศึกษา 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
- Design Principles: Fan-In vs Fan-Out (http://it.toolbox.com/blogs/enterprise-solutions/design-principles-fanin-vs-fanout-16088)
- Software Engineering-Control Hierarchy
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.