Code Smell & Refactoring ตอนที่ 3
จากครั้งที่แล้ว เรารู้จัก ประเภทของ Code Smells ไป 4 ประเภทแล้วนะครับ ในครั้งนี้เราจะมาเล่าเกี่ยวกับประเภทของ Code Smell ประเภทสุดท้ายกัน
5. Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers)
หลักการพื่้นฐานในการออกแบบส่วนประกอบของซอฟแวร์ ศัพท์ที่จำเป็นต้องทราบมีสองตัวคือ Coupling และ Cohesion
Cohesion คือ เป็นการบอกถึงความสอดคล้องกัน นั้นหมายความว่า ใน Class หนึ่่งคลา่ส Method ในคลาสนั้นๆควรจะต้องทำงานให้มีความสอดคล้องกัน การทำงานต่างๆที่ควรจะเป็นไปในทางเดียวกัน
Coupling คือ ระดับความเกี่ยวข้อง หรือ พึ่งพากันของ Object ต่างๆในระบบ หากระบบใดมีความเกี่ยวข้องกันของ Object ที่สูงก็จะทำให้ระบบนั้นมีความอิสระนั้นต่ำ
สรุปอย่างตรงมาตรงไป การออกแบบส่วนประกอบของซอฟแวร์ที่ดี ต้อง Strong cohesion , loosely coupling นั้นก็คือ พยายามเขียนโปแกรมให้สัมพันธ์สอดคล้องกันภายในคลาสให้มากที่สุด และพยายามลดความสัมพันธ์ระหว่าง class ให้น้อยที่สุด
Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers) ก็เช่นเดียวกัน คือ ความเกี่ยวข้องกันของ Class ต่างๆในระบบมีความเกี่ยวข้องกันมากเกินไป อาจจะทำให้เวลาทำการย้าย หรือ แก้ไข ก็ทำได้ลำบาก และเมื่อทำการแก้ไขส่วนใดส่วนหนึ่งของระบบ ก็อาจจะไปกระทบกับส่วนอื่นๆ ที่เกี่ยวข้องครับ Class ไม่เป็นอิสระต่อกัน
สรุปหัวข้อประเภทของ Code Smell
สรุปหัวข้อประเภทของ Code Smell ที่จะพูดถึงรายละเอียดในครั้งหน้าครับ
1. Code Smell แบบบวมๆ(Bloaters)
- Long Method
- Large Class
- Primitive Obsession
- Long Parameter List
- Data Clumps
2. Code Smell แบบใช้ OO แบบผิดๆ(Object-Orientation Abusers)
- Switch Statements
- Temporary Field
- Refused Bequest
- Alternative Classes with Different Interfaces
3. Code Smell แบบเด็ดดอกไม้สะเทือนถึงดวงดาว (Change Preventers)
- Divergent Change
- Shotgun Surgery
- Parallel Inheritance Hierarchies
4. Code Smell แบบเอาไว้ก่อน (Dispensables)
- Comments
- Duplicate Code
- Lazy Class
- Data Class
- Dead Code
- Speculative Generality
5. Code Smell แบบน้ําพึ่งเรือเสือพึ่งป่า (Couplers)
- Feature Envy
- Inappropriate Intimacy
- Message Chains
- Middle Man
- Incomplete Library Class
จบ เนื้อหา ประเภทของ Code Smell แล้วครับในครั้งหน้าเราจะลงรายละเอียดต่อไปครับ
Stream Magento ทีม Code คุณภาพ
Sources
- Refactoring: Improving the Design of Existing Code – Martin Fowler
- Mäntylä, M. V. and Lassenius, C. “Subjective Evaluation of Software Evolvability Using Code Smells: An Empirical Study”. Journal of Empirical Software Engineering, vol. 11, no. 3, 2006, pp. 395-431.