SOLID

SOLID là một nguyên lý thiết kế phần mềm được đưa ra bởi Robert C. Martin (hay còn được gọi là Uncle Bob) – một chuyên gia phần mềm người Mỹ, tác giả của cuốn sách gối đầu giường nổi tiếng Clean Code được hàng nghìn coder yêu mến.

SOLID là viết tắt của

Image result for solid principles

1. Single responsibility principle

Một Class chỉ nên có một nhiệm vụ duy nhất.

=> Class (kể cả function) chỉ nên đảm nhiệm một nhiệm vụ cụ thể. Chẳng hạn Class DBAccess thì chỉ nên dùng để truy cập đến DB, chứ không bao hàm việc Render nên trang web. Việc chia tách các Class/Function theo từng chức năng cụ thể giúp cho việc bảo trì và sửa lỗi trở nên dễ dàng hơn rất nhiều.

2. Open–closed principle

Không nên thay đổi các class, mà hãy mở rộng chúng.

=> Bạn có class Footballer, bây giờ bạn muốn có chức năng bắt gôn cho cầu thủ, thay vì thêm một hàm goal_keeping() trong Class Footballer, rõ ràng nên thêm 1 class gọi là GoalKeeper extend class Footballer và thực hiện hàm goal_keeping(). Tương tự, ta có thể thêm các class Striker (tiền đạo), MiddleField (tiền vệ trung tâm),… bởi vì mỗi vị trí trên sân có một nhiệm vụ cụ thể (như đã đề cập ở trên).

3. Liskov substitution principle

Các Object của class cha có khả năng thay thế bởi các Object của các class kế thừa mà không làm thay đổi sự đúng đắn của chương trình.

=> Ở ví dụ phía trên ta có base class là Footballer và các class kế thừa như GoalKeeper, Striker. Mỗi một cầu thủ như tiền đạo là Object của class Striker có thể thay thế cho Object của Footballer (cầu thủ).

4. Interface segregation principle

Nếu có một interface to đùng nhiều chức năng thì nên thay thế bằng nhiều interface nhỏ hơn.

=> Trường hợp một class như Footballer có thể đảm nhiệm nhiều nhiệm vụ như tấn công, phòng thủ, bắt gôn. Ta nên chia thành các class nhỏ hơn đảm nhận các nhiệm vụ khác nhau: Striker, MiddleField, GoalKeeper…

5. Dependency inversion principle

Trong phần mềm thì tầng phía trên không nên bị phụ thuộc vào tầng phía dưới mà phải ngược lại.

=> Vẫn là ví dụ trên :). Ta có class Footballer với các hàm kick_ball(), pass_ball(). Các class kế thừa như Striker sẽ phụ thuộc vào các thực thi trong class Footballer chứ không phải ngược lại. Dù class Striker có override hàm kick_ball() cũng không làm thay đổi class Footballer.

Nhắc đến đá bóng, mình muốn nói với các bạn rằng:

VIỆT NAM VÔ ĐICH!!!

Leave a comment