Принципы
Принципы проектирования, которые стоят за паттернами и архитектурными стилями. Код в темах показывает, как выглядит решение, когда принцип соблюдён, а вариант «до» лежит в статье.
Группы
solid/- SOLID: пять принципов объектного проектирования
Темы
SOLID
Общая статья: SOLID.
- Принцип единственной ответственности (Single Responsibility Principle) - подсчёт продаж и форматирование отчёта меняются по разным причинам и живут порознь
- Принцип открытости/закрытости (Open/Closed Principle) - новый способ оплаты подключается к кассе без правки её кода
- Принцип подстановки Лисков (Liskov Substitution Principle) - хранилище только для чтения не наследует запись, которую не умеет
- Принцип разделения интерфейсов (Interface Segregation Principle) - печать и сканирование отдельными узкими интерфейсами
- Принцип инверсии зависимостей (Dependency Inversion Principle) - сервис уведомлений знает порт
Mailer, а SMTP подключается снаружи
Общие
- Не повторяйся, не усложняй, не делай впрок (DRY, KISS, YAGNI) - одно знание в одном месте, простое решение вместо хитрого, ничего «на будущее»
- Закон Деметры (Law of Demeter) - доставка спрашивает заказ, куда его везти, а не лезет в покупателя и адрес
- Композиция вместо наследования (Composition over Inheritance) - набор каналов уведомлений собирается списком, а не новым классом
solid/SOLID
- dependency-inversion/Принцип инверсии зависимостей Dependency Inversion PrincipleМодули верхнего уровня зависят от абстракций, а не от деталей: сервис уведомлений знает порт Mailer, а SMTP - деталь, которая подключается снаружи.
- interface-segregation/Принцип разделения интерфейсов Interface Segregation PrincipleКлиент не должен зависеть от методов, которыми не пользуется: печать и сканирование - отдельные узкие интерфейсы, а не одно "устройство".
- liskov-substitution/Принцип подстановки Лисков Liskov Substitution PrincipleПодтип должен работать везде, где ждут базовый тип: хранилище только для чтения не наследует запись, которую не умеет выполнять.
- open-closed/Принцип открытости/закрытости Open/Closed PrincipleМодуль открыт для расширения и закрыт для изменения: новый способ оплаты подключается к кассе без правки её кода.
- single-responsibility/Принцип единственной ответственности Single Responsibility PrincipleУ модуля одна причина для изменения: подсчёт продаж и форматирование отчёта меняются по разным причинам, поэтому живут порознь.
Темы
- composition-over-inheritance/Композиция вместо наследования Composition over InheritanceПоведение собирается из небольших частей, а не наследуется: новый набор каналов уведомлений - это новый список, а не новый класс.
- dry-kiss-yagni/Не повторяйся, не усложняй, не делай впрок DRY, KISS, YAGNIТри коротких правила против лишнего кода: одно знание - в одном месте, простое решение вместо хитрого, и ничего "на будущее".
- law-of-demeter/Закон Деметры Law of DemeterОбъект общается только с ближайшими соседями: спрашивает заказ, куда его везти, а не лезет через заказ в покупателя и его адрес.