Шаблон «Инверсия управления». Повторение кода, проблема порядка инициализации, замена mock-объектами при модульном тестировании

Содержание

Слайд 2

Характеристики программных объектов Статические: Тип объекта (класс, интерфейс) Методы и свойства

Характеристики программных объектов

Статические:
Тип объекта (класс, интерфейс)
Методы и свойства объекта (из иерархии

классов/интерфейсов)
Динамические:
Жизненный цикл объекта (создание, инициализация, удаление)
Зависимости объекта от других объектов
Безопасность использования в многопоточной среде
Слайд 3

Жизненные циклы объектов Долгоживущие (пока работает программа) Сервисы, контроллеры, объекты доступа

Жизненные циклы объектов

Долгоживущие (пока работает программа)
Сервисы, контроллеры, объекты доступа к данным
Сессионные

(во время сессии пользователя)
Информация о текущем пользователе, состояние wizard’а, интерфейсных элементов
Временные (во время обработки действия пользователя)
Объекты, выгруженные из БД для обработки текущего запроса (доменная модель)
Слайд 4

Singleton Долгоживущие объекты – Singleton-ы Реализация getInstance() Проблемы: повторение кода, проблема

Singleton

Долгоживущие объекты – Singleton-ы
Реализация getInstance()
Проблемы: повторение кода, проблема порядка инициализации, замена

mock-объектами при модульном тестировании
Реализация: реестр синглетонов
Один синглетон, который управляет остальными
Слайд 5

Пример конфигурации Spring

Пример конфигурации Spring

Слайд 6

Пример использования Spring

Пример использования Spring

Слайд 7

Inversion Of Control Представляет собой реестр (контейнер) объектов, которыми управляет Позволяет

Inversion Of Control

Представляет собой реестр (контейнер) объектов, которыми управляет
Позволяет декларативно конфигурировать

объекты и их свойства
Сам код классов может не зависеть от IoC фреймворка. IoC контейнер является “клеем”
Берет на себя
Управление жизненным циклом объекта (когда и кем создается, когда удаляется)
Управление зависимостями (объект лишь говорит что ему нужно)
Слайд 8

Пример конфигурации на аннотациях

Пример конфигурации на аннотациях

Слайд 9

Дополнительные преимущества IoC Возможность прозрачно использовать паттерны семейства Factory в IoC

Дополнительные преимущества IoC

Возможность прозрачно использовать паттерны семейства Factory в IoC (сам

код, использующий объекты не знает о фабриках)
Сильно снижает степень зависимости между классами, => легко тестируемые классы
Хорошо накладывается на принципы AOP.
Слайд 10

Реализации Spring Framework (OpenSource, Java) Spring.NET (OpenSource) Castle (OpenSource, .NET) Unity

Реализации

Spring Framework (OpenSource, Java)
Spring.NET (OpenSource)
Castle (OpenSource, .NET)
Unity (Microsoft, .NET)
Google Juice (OpenSource,

Java)
EJB 3+ (Java, JSR Standard)