Link to original video by Khủng Long Ăn Cỏ

Tại sao nguyên tắc SOLID là bí quyết để viết code tốt hơn?

Outline Video Tại sao nguyên tắc SOLID là bí quyết để viết code tốt hơn?

Tóm tắt ngắn:

Tóm tắt chi tiết:

Video chia thành 5 phần chính, mỗi phần giải thích một nguyên tắc trong SOLID:

1. Single Responsibility Principle (SRP): Mỗi class chỉ nên có một lý do để thay đổi, chịu trách nhiệm cho một chức năng duy nhất. Ví dụ: Class User chứa cả thông tin người dùng và email nên được tách thành UserEmailService. Class Invoice xử lý lưu hóa đơn và gửi email cũng cần được tách riêng. Lợi ích của SRP bao gồm: code dễ hiểu, dễ bảo trì, dễ mở rộng, tăng khả năng tái sử dụng và dễ kiểm thử. Video nhấn mạnh việc tách các chức năng thành các module riêng biệt, ví dụ như việc tách folder service trong backend.

2. Open/Closed Principle (OCP): Hạn chế sửa đổi code hiện có và ưu tiên mở rộng bằng kế thừa. Ví dụ: Hệ thống tính chi phí sản phẩm với các loại thuế khác nhau. Trước khi áp dụng OCP, việc thêm loại sản phẩm mới đòi hỏi sửa đổi class cha. Sau khi áp dụng OCP, sử dụng kế thừa để mở rộng tính năng tính thuế mà không cần sửa đổi class cha. Lợi ích: dễ mở rộng, giảm lỗi, dễ bảo trì, hỗ trợ kiểm thử tốt hơn.

3. Liskov Substitution Principle (LSP): Các class con phải có thể thay thế class cha mà không làm thay đổi tính đúng đắn của chương trình. Ví dụ: Penguin kế thừa Bird nhưng không thể bay, vi phạm LSP. Giải pháp: tách Bird thành FlyingBirdNonFlyingBird. Lợi ích: đảm bảo tính đúng đắn, tăng tính linh hoạt, hỗ trợ bảo trì và mở rộng.

4. Interface Segregation Principle (ISP): Mỗi class không nên phụ thuộc vào các method mà nó không sử dụng. Chia nhỏ interface thành các interface cụ thể. Ví dụ: Quản lý tài khoản ngân hàng (thường, tiết kiệm) với các chức năng khác nhau. Trước khi áp dụng ISP, một interface lớn chứa tất cả chức năng. Sau khi áp dụng, chia nhỏ thành các interface nhỏ hơn cho từng loại tài khoản. Ví dụ khác: máy in cơ bản không cần chức năng fax hay scan. Lợi ích: giảm phụ thuộc, tăng tính linh hoạt, dễ đọc, dễ bảo trì, tránh ảnh hưởng dây chuyền.

5. Dependency Inversion Principle (DIP): Các module cấp cao không nên phụ thuộc vào các module cấp thấp, mà nên phụ thuộc vào abstraction (trừu tượng). Ví dụ: Hệ thống gửi thông báo (email, SMS). Trước khi áp dụng DIP, class chính phụ thuộc trực tiếp vào EmailService. Sau khi áp dụng, sử dụng interface MessageService để các dịch vụ thông báo có thể thay thế lẫn nhau. Lợi ích: tăng tính linh hoạt, cải thiện khả năng tái sử dụng, tăng khả năng kiểm thử, giảm ảnh hưởng dây chuyền.

Video kết luận rằng việc hiểu và áp dụng SOLID giúp viết code sạch hơn, dễ bảo trì và mở rộng hơn. Người trình bày nhấn mạnh rằng SOLID là nguyên tắc hướng dẫn, không phải là tuyệt đối, và người lập trình giỏi biết khi nào nên áp dụng chúng. Cuối cùng, video khuyến khích người xem like và subscribe kênh.