SOLID là tập hơn các nguyên tắc thiết kế phần mềm trong lập trình hướng đối tượng, nếu áp dụng được các nguyên tắc này trong quá trình code thì code sẽ Cleon và xịn và chuyên nghiệp hơn, sẽ giúp cho code dễ maintain và mở rộng hơn
S (Single Reponsibility Principles): mỗi class chỉ nên có 1 trách nhiệm duy nhất
O (Open - closed principles): khi thêm một function hay chức năng gì đó thì nên kế thừa từ class cần thiết tránh việc thay đổi trục tiếp trên đó sẽ gây ra lỗi ở nhiều nơi mà không kiểm soát được
L (Liskov subtitution principles): Nguyên lý thay thế Liskov, các lớp con có thể thay thế lớp cha, nếu lớp con không thể thay thế lớp cha hoàn toàn thì nó không phải là lớp con đúng đắn của lớp cha
Ví dụ: Có chương trình Bán Vịt thì sẽ có class cha là Duck và từ class cha này có thể tạo ra các class con như Vịt xiêm, Vịt trắng, Vịt Mỹ,.. Thì những class con này có thể thay thế class cha, nhưng có class như Vịt đồ chơi thì sẽ không thể thay thế được lớp cha vì nó làm thay đổi tính đúng đắn của chương trình
I (Interface segeration principles): nghĩa là sẽ tách các interface thành các thành phần nhỏ hơn, tránh việc các class implement từ interface quá lớn sẽ gây dư thừa và khó sử dụng quản lý hơn
Ví dụ: thay vì có 1 interface về hành động của con vật trong interface đó có thể chứa các hành động như: bay, nhảy, bơi, ăn,… hay hàng trăm hành động khác. Thì nếu implement từ interface này sẽ gây dư thùa và khó quản lý
D (Dependency inversion principle): các module cấp cao không nên phụ thuộc vào các module cấp thấp, mà cả 2 nên phụ thuộc vào các abtraction (interface hoặc abstract classes). Các abtraction không nên phụ thuộc vào chi tiết và các chi tiết thì nên phụ thuộc abtraction