Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
средства
разработки ПО
Предметно-ориентированное проектирование.
Проектирование по модели (MDD)*MDD)*
МГТУ им. Н.Э. Баумана, ИУ-6, Фетисов Михаил Вячеславович
fetisov.michael@bmstu.ru
Содержание лекции
●
Цикл существования объектов модели
●
Агрегаты
●
Фабрики
●
Хранилища
●
Проектирование по модели
●
Этапы одной итерации
●
Примеры
Трудности работы со связными
объектами модели
●
Поддержание целостности объекта на этапе
его существования
●
Предотвращение излишней сложности в
управлении циклом существования объекта
Цикл существования объекта из
модели предметной области
Агрегаты
●
Агрегат — совокупность взаимосвязанных
объектов, которые мы воспринимаем как единое
целое с точки зрения изменения данных.
●
Понятие агрегата очень важно в проектировании
по модели, так как выделяет из набора понятий
корневую (главную) сущность, которая
позволяет управлять транзакционностью,
контролем инварианта агрегата, выполнять
создание целостной совокупности объектов и
хранением её состояния.
Локальная и глобальная
идентичность, ссылки на объекты
Инварианты агрегата
Правила работы с агрегатом
●
Корневой объект-сущность имеет глобальную идентичность и несёт
полную ответственность за проверку инвариантов
●
Некоренные объекты-сущности имеют локальную идентичность – они
уникальны только в границах агрегата
●
Нигде за пределами агрегата не может храниться ссылка на что-либо
внутри него (MDD)*только временные ссылки и значения)
●
Значит, только корневые объекты агрегатов можно непосредственно
получать по запросам из БД. Все остальные объекты разрешается
извлекать по цепочке связей
●
Объекты внутри агрегата могут хранить ссылки на корневые объекты
других агрегатов
●
Операция удаления должна ликвидировать всё, что находится в
границах агрегата
●
Как только вносится изменение в любой объект агрегата, следует сразу
удовлетворять все инварианты этого агрегата
Пример агрегата
Коллекторное агентсво
Ещё пример агрегата
Воздушное судно
Фабрики
●
Фабрика – инкапсуляция, которая
необходима, если создание объекта или
целого агрегата представляет большую
сложность или открывает постороннему глазу
слишком много внутренней структуры
●
Структуры фабрик:
– порождающие шаблоны проектирования
Работа с фабрикой
Хранилища
●
Хранилища — инфраструктурные элементы,
поддерживающие непрерывность существования объектов
модели
●
Хранилища обеспечивают следующие возможности:
– предоставляют простую модель получения устойчиво существующих
объектов и управления их жизненным циклом;
– убирают из операционного слоя приложения и модели предметной
области необходимость в поддержке целостности объектов,
различных вариантов технологий СУБД, и даже разных источников
данных;
– обеспечивают транзакционность операций с объектами, агрегатами;
– позволяют легко заменить себя «заглушками» для целей
тестирования (MDD)*обычно заглушкой служит находящаяся в
оперативной памяти коллекция).
Работа с хранилищем
Императивы гибкой разработки
(Agile)Agile))
●
Сократить время каждой итерации
●
Обеспечить максимальное соответствие релиза
принятой модели
Проектирование по модели (Agile)MDD)
●
Проектирование по модели (MDD)*model-driven
design, MDD) — проектирование архитектуры,
при котором соблюдается максимально точное
соответствие между некоторым подмножеством
элементов программы и элементами модели
●
или, иными словами, процесс совместной
разработки модели и её программной реализации
с сохранением такого соответствия между ними
●
т. е. формирование / модификация модели =
формирование / модификация кода
Этапы одной итерации
●
Рефакторинг (MDD)*углубляющий рефакторинг)
– старые автотесты проходят
●
Кодирование вспомогательной
функциональности
– изменение старых автотестов
– создание новых автотестов
●
Кодирование основной функциональности
– создание новых автотестов
●
Показ
Рефакторинг
Углубляющий (Agile)уточняющий) рефакторинг
●
Рефакторинг — это такая реструктуризация
программы, в результате которой не изменяются её
функциональные возможности
●
При углубляющем рефакторинге может изменяться
функциональность, если это изменение незначительное
●
Рефакторинг выполняется, если необходимо сделать
модель объектов проще, понятнее или как
предварительный этап перед добавлением новой
функциональности
●
Важным является то, что после рефакторинга
регрессионные тесты должны выполняться без
изменений (MDD)*или с незначительными изменениями)
Последовательность проектирования
на основе модели (Agile)итоги)
●
Выделение понятий предметной области, участвующих в реализуемом
функционале (MDD)*обычная техника ООП)
●
Построение ассоциаций между понятиями предметной области и их максимальное
упрощение
●
Выделение сущностных понятий предметной области — объектов (MDD)*понятий)
предметной области, характеризующихся непрерывностью и индивидуальностью
(MDD)*уникальностью) существования
●
Выделение объектов-значений — понятий, которые представляют описательный
аспект предметной области и не имеют индивидуального существования,
собственной идентичности
●
Выделение служб — операций или групп операций, предлагаемых в модели в виде
обособленного интерфейса, который в отличие от сущности или объекта-значения
не имеет никакого состояния
●
Разделение модели на модули — устоявшихся элементов архитектуры программы
●
Объединение объектов модели в агрегаты — совокупность взаимосвязанных
объектов, которые мы воспринимаем как единое целое с точки зрения изменения
данных
Пример
Модель заказа
Вопросы?