Код написан по книге O'Relly
https://www.ozon.ru/context/detail/id/20216992/
- Инкапсулируйте то что изменяете
- Предпочитайте композицию наследованию
- Программируйте на уровне интерфейсов
- Стремитесь к слабой связанности взаимодействующих объектов
- Классы должны быть открыты для расширения и закрыты для изменения
- Принцип инверсии зависимостей: Код должен зависеть от абстракций, а не от конкретных зависимостей
- Принцип минимальной информированности: общайтесь только с близкими друзьями(чтобы не приводить к каскадным изменениям системы)
- Голливудский принцип: не вызывайте нас - мы вас сами вызовем(необходимо избегать циклических зависимостей)
- Класс должен иметь только одну причину для изменения