Single Responsibility Principle (SRP)
Open/Closed Principle (OCP)
Liskov Substitution Principle (LSP)
Interface Segregation Principle (ISP)
Dependency Inversion Principle (DIP)
Hầu hết các lập trình viên có thể biết đến SOLID. Nhưng dường như có khá ít người có thể giải mã được nó.
Các nguyên tắc SOLID có thể được sử dụng trong bất kỳ ngôn ngữ lập trình hướng đối tượng nào. Vì vậy, chúng ta hãy cùng nhau tìm hiểu năm nguyên tắc SOLID.
1. Single responsibility principle (S)
Nguyên lý đầu tiên ứng với chữ ‘S‘ trong SOLID, có ý nghĩa là một class chỉ nên giữ một trách nhiệm duy nhất.
Ví dụ có 1 class như sau:
Lớp Post thực hiện quá nhiều việc và như chúng ta thấy, nó chỉ nên thực hiện một việc . Vấn đề chính là nó chịu trách nhiệm lấy dữ liệu từ DB, in ra các định dạng khác nhau, JSON, HTML, ..v.v . Càng về sau class sẽ càng phình to ra. Theo đúng nguyên lý, cần phải tách class này ra làm 3 class riêng. Tuy số lượng class nhiều hơn những việc sửa chữa sẽ đơn giản hơn, class ngắn hơn nên cũng ít bug hơn.
2. Open/closed principle (O)
Nguyên lý thứ hai, tương ứng với chữ ‘O‘ trong SOLID.
Có ý nghĩa là có thể thoải mái mở rộng 1 class, nhưng không được sửa đổi bên trong class đó.
Hãy theo dõi 1 ví dụ sau:
Class Communication có được mở để mở rộng và đóng để sửa đổi không ? Để trả lời câu hỏi này, chúng ta có thể hỏi nó theo cách khác. Có thể thêm một class động vật mới mà không thay đổi mã hiện có không ? Câu trả lời tất nhiên là Không. Việc thêm một lớp động vật mới sẽ yêu cầu sửa đổi trong function communicate().
Do đó hãy cải thiện code của chúng ta với việc áp dụng nguyên lý Open/closed principle.