[CODING SKILL] Code thối – Code smell – Anti pattern

< 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) —