< CODING SKILL >
Note nhẹ một vài dạng code smells (code thối) để ae tránh 😉 ❎Feature Envy: Trong class A get một vài thuộc tính của class B xong thực hiện tính toán hoặc làm gì đó trên dữ liệu đó → Nên đưa hàm tính toán đó vào class B và call đến hàm đó từ class A.❎Divergent Change: Những thay đổi đéo liên quan đến nhau nhưng đc thực hiện trên cùng 1 class → Cần Extract ra nhiều class nhỏ
❎Large Method/Class: Class/Method làm quá nhiều việc, khó unit test, khó maintain, dễ phát sinh bug khi modify → Cần chia nhỏ ra
❎Duplicated Code: Nhiều đoạn code tương tự nhau, chỉ khác một số tham số → Nên viết thành hàm hoặc code thành class, sử dụng Template Method design pattern
❎Shotgun Surgery: Cần change nhiều class chỉ vì 1 lý do nào đó (thay đổi tính năng, thêm tính năng, …) → Nên đưa những methods liên quan ở những class này vào 1 class riêng
❎Data Clumps: Nhiều hàm có cùng 1 parameters list → Đưa parameters list vào 1 class (struct)
❎Switch Statements: Trong switch mà có if/else loẳng ngoằng thì nên create function xong call nó.
❎Message Chain: A->xxx()->yyy()->zzz() → Không nên làm thế này, chỉ call 1 tầng thôi
❎Inappropriate Intimacy: Hàm của class A cần → truy cập quá nhiều data và call nhiều hàm của class B để có thể thực hiện một task nào đó → Nên để class B thực hiện task đó thông qua một hàm nào đó, class A sẽ call hàm của class B
❎Temporary Attributes: Class có những thuộc tính chỉ sử dụng đúng 1 lần → nên xem xét đưa vào tham số của hàm
❎Speculative Generality: Code thừa, code sẵn để sau này sử dụng → Tốt nhất là xoá cmn đi. Muốn đảm bảo tính mở rộng thì phải áp dụng các phương pháp thiết kế (design patterns) chứ không phải code sẵn.
— Phạm Minh Tuấn (Shun) —