Ответ
SOLID — это акроним пяти ключевых принципов объектно-ориентированного проектирования, направленных на создание понятного, гибкого и поддерживаемого кода.
-
S – Single Responsibility Principle (Принцип единственной ответственности). Класс должен иметь одну и только одну причину для изменения. Я применяю это, разделяя, например, класс
Order, который знал всё о заказе, наOrder(данные),OrderValidator(валидация) иOrderRepository(сохранение). -
O – Open/Closed Principle (Принцип открытости/закрытости). Сущности должны быть открыты для расширения, но закрыты для модификации. Вместо добавления условий
ifв методCalculateDiscount(User user)для каждого нового типа пользователя, я создаю абстракциюIDiscountStrategyи набор классов (RegularDiscount,PremiumDiscount), которые легко добавляются. -
L – Liskov Substitution Principle (Принцип подстановки Барбары Лисков). Наследующий класс должен быть способен заменить родительский, не ломая логику программы. Если у меня есть
RectangleиSquare, наследованиеSquareотRectangleнарушит LSP, так как изменение ширины уSquareизменит и высоту. Лучше иметь общий интерфейсIShape. -
I – Interface Segregation Principle (Принцип разделения интерфейсов). Много специализированных интерфейсов лучше одного «толстого». Вместо
IMonsterPrinter, который имел методыPrint,Scan,Fax, я разделяю его наIPrinter,IScanner. КлассSimplePrinterтогда реализует толькоIPrinter. -
D – Dependency Inversion Principle (Принцип инверсии зависимостей). Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Вместо того чтобы класс
ReportServiceнапрямую создавал экземплярMySqlRepository, он получаетIRepositoryчерез конструктор. Это упрощает тестирование (можно подменить заглушкой) и смену реализации.
Следование этим принципам в моей работе снижает coupling (связность) и повышает cohesion (сцепление) кода.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶