11. Open/Close Principle
• Класс открыт для расширения
– новое поведение может добавиться в будущем
• Закрыт для модификации
– изменения в код класса не допускаются
13. Как это сделать?
• Параметры
– лямбда/делегаты
• Наследование
– дочерние классы переопределяют поведение родительского
класса
• Композиция/Strategy
– передаем абстракцию
– используем этот класс в существующем для реализации
расширений
15. Liskov Substition Principle
• Is – a
• Is – substitutable – for
• Дочерние классы не должны нарушать
поведения родительских контрактов (пред-
условия и пост-условия)
17. Liskov Substitution Principle
• Создаем новый класс
– два класса делят функциональность, но не заменяемы
– можно создать 3 класс от которого пронаследовать эти
два класс
– Убедится что классы наследники и родитель
заменяемы
18. Interface Segregation Pinciple
• Принцип разделения интерфейсов
– Клиенты не должны зависить от методов
которые они не используют
21. Dependency Inversion Principle
• Модули верхнего уровня не должны
зависеть от модулей нижнего уровня. Оба
должны зависеть от абстракции.
• Абстракции не должны зависеть от деталей.
Детали должны зависеть от абстракций.
22.
23. Зависимости
• Внешние библиотеки
• База данных
• Статические методы
• New keyword
• Сетевые взаимодействия
• System Clock
• Random
24. Зависимости класса
• Конструктор класса должен указывать
зависимости в которых он нуждается (явные
зависимости)
• Остальные классы работают со скрытыми
зависимостями
26. Dependency Injection
• Техника когда вызывающий класс поставляет(to inject)
зависимости вызываемому классу
• 3 основных способа:
• Через конструктор
• Через свойство
• Через параметр
27. Constructor Injection
• За
– четко выдны зависимости класса
– можно работать как с контейнером так и без
– класс всегда в валидном состоянии после создания
• Против
– может быть много параметров в конструкторе (ds)
– не всем методам нужны переданные параметры (ds)
– иногда нужен конструктор без параметров
28. Property Injection
• За
– зависимость можно передать в любой момент
– очень гибко
• Против
– Объект может быть в нестабильнос состоянии если какая-то
из зависимостей не передана
– менее явно
29. Parameter Injection
• За
– Не нужно менять весь класс
– очень гибко
• Против
– путает сигнатуру метода
– много параметров (ds)
31. Где создавать объекты?
• Конструктор по умолчанию без параметров (poor man’s ioc)
• composition root
• IoC container
32. IoC Container
• Инициализируют граф объектов
• Регистрируют типы объектов
• Разрешают типы объектов
• Можно использовать как код так и конфигурацию