Skip to content

Instantly share code, notes, and snippets.

@KamMif
Last active September 6, 2019 06:07
Show Gist options
  • Save KamMif/86f9cac23a98c712a4c3a110128466b9 to your computer and use it in GitHub Desktop.
Save KamMif/86f9cac23a98c712a4c3a110128466b9 to your computer and use it in GitHub Desktop.
Дядюшка Боб
Принцип открытости\закрытости
Цель - сделать систему легкорасширяемой и обезопасить ее от влияния изменений
Эта цель достигается делением системы на компонентыи упорядочением их зависимостей в иерархию - защищающуу компоненты уровнем выше от изменений в компонентах уровнем ниже
Принцип единственной ответственности
Принцип при котором причины изменения конкретного модуля должны зависеть от конкретной группы (конкретных акторов)
Руководствуясь этим принципом у вас не может быть 1го класса который отвечает за оплату во всем приложении,
в котором есть несколько групп (акторов) пользователей
Необходимо разделить оплату на классы по группа пользователей и подумать о возможности обьеденения их
чтобы не нужно было создавать несколько экземпляров (например сделать Фасад)
Принцип инверсии зависимостей
Необходимо избегать зависимостей от модулей которые динамически изменяются, над которыми активно ведется работа
Необходимо искать такие пути внедрения новых возможностей, которые не потребуют изменения интерфейсов
- Не ссылайтесь на изменчивые классы, ссылайтесь на абстрактные интерфейсы (Абстрактная фабрика)
- Не наследуйте изменчивые конкретные классы
- Не переопределяйте конкретные функции (создать абстрактную функцию и сделать несколько реализаций)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment