SlideShare a Scribd company logo
DDD: проблемы и решения 
при отражении модели 
предметной области в код 
Максим Цепков, 
главный архитектор, 
группа компаний CUSTIS
О чем этот доклад? 
В применении любой методологии есть этапы 
Смотрим примеры – в них все хорошо 
Применяем, решая возникающие проблемы 
Осмысливаем опыт решения, развивая метод 
DDD – не исключение 
В докладе речь пойдет о нашем опыте 
решения проблем, возникающих 
при применении DDD в сложных проектах 
2/38
План доклада 
1. Идея и внутренние противоречия DDD 
2. Проблемы при использовании DDD 
3. Технологические рельсы – наш способ решения 
4. Адаптация процесса разработки 
5. Достигнутые преимущества 
3/38
Идея 
и внутренние противоречия DDD 
4/38
DDD – как оно начиналось 
Концептуальная книга Эрика Эванса 
• на английском – в 2003 г. 
• на русском – только в 2010 г. 
Практическая книга Джимми Нильссона 
• на английском – в 2006 г. 
• на русском – в 2007 г. (почти сразу!) 
5/38
Основная идея DDD 
Бизнес- 
аналитик 
Бизнес- 
модель 
Системный 
аналитик, 
архитектор 
Разработчик 
Модель 
приложения Код 
Заказчик 
Аналитики и архитектор 
Разработчик 
Модель на едином языке Код 
РАНЬШЕ 
DDD 
Заказчик 
Переход к единственной модели 
на едином языке решил много 
старых проблем, но породил новые 
6/38
Плюсы модели на едином языке 
 Единое поле коммуникаций для всех участников 
проекта 
 Верификация модели заказчиком и выявление 
наиболее критичных ошибок на этапе постановок 
 Простота внесения изменений в требования: 
их не надо протаскивать через несколько моделей 
 Гибкость реагирования на ограничения, выявляемые 
при разработке: их можно передать заказчику 
посредством модели и найти решения 
7/38
Подробнее о DDD 
О преимуществах единственной модели на едином 
языке я рассказывал в докладах на конференциях: 
«DDD: Реализуем проект Вавилонская башня» 
(Software People – 2012) 
«DDD — эффективный способ работы в условиях системной (SECR – 2011) 
8/38
Проблемы при использовании 
одной модели 
Потому две 
модели 
и использовали 
 Необходимость понимания 
модели заказчиком существенно 
ограничивает моделирование 
 Технические подробности и сложные формальные методы 
становятся недопустимы 
 А без них модель не может служить проектом 
для реализации, нужно дополнительное проектирование 
Единственная модель на едином языке – 
и преимущество DDD, и источник проблем 
9/38
Стандартные пути решения проблем 
 ООП – общепринятый и (на простом уровне) 
интуитивно понятный метод 
 Модель, сделанная в объектной парадигме, может 
быть представлена заказчику и согласована с ним 
 Современные языки поддерживают ООП, 
модель хорошо реализуется с использованием 
шаблонов Domain model и Rich objects 
Этот способ работает, но ограниченно. 
Простого ООП не хватает, а изучать сложный 
заказчики не считают правильным 
10/38
Простое применение DDD 
 На основе требований создаем объектную модель 
• структура классов 
• поведение объектов 
• интерфейсы 
 Согласуем ее с заказчиком 
 Реализуем в коде на основе шаблонов 
Domain model и Rich objects 
Что получается? 
11/38
Проблемы при использовании DDD 
Практические аспекты 
12/38
Большие и сложные объекты 
 Бизнес-объект включает все аспекты деятельности 
• Клиент – как субъект делового мира, партнер по сделкам, 
взаимоотношения юридические и управленческие 
• Заказ – полный жизненный цикл от начальных переговоров 
до исполнения, включая юридическое и другое оформление 
 Бизнес-объекты тесно связаны между собой 
При отражении в IT-объекты получается очень 
похоже на антипаттерн Big Object 
Сложно понимать, развивать, тестировать 
13/38
Техническое усложнение модели 
 Принципы ООП побуждают к декомпозиции, 
что увеличивает число объектов 
 Применение шаблонов (стратегии и др.) 
 Технические и инфраструктурные атрибуты 
и классы 
 Ограничения на объекты со стороны фреймворков 
и обходные пути для их преодоления 
Сложная модель не понимается заказчиком, 
простая – не отражает реализацию 
14/38
Ограниченная область DDD-модели 
 Подход разрабатывался для слоя бизнес-логики 
 Использование объектных языков побуждает 
ограничиться объектными моделями 
Хочется 
 Использовать модель при проектировании 
интерфейсов 
 Расширять способы моделирования 
15/38
Решение – 
технологические рельсы 
Отделяем 
технологические аспекты 
от модели 
16/38
Что такое технологические рельсы 
Технологические рельсы – это способ перевода 
модели на едином языке в код 
Платформы, фреймворки и библиотеки 
Способы их организации в единое приложение 
Способы отражения модели приложения в код 
Типовые задачи и design patterns для их реализации 
Формулируются на всех уровнях – от архитектуры 
до частных задач посылки сообщения 
«Применяем Domain model и Rich Objects» – 
частный случай технологических рельсов 
17/38
Технологические рельсы 
(шаблоны реализации) По рельсам  
Модель 
на едином языке Код 
Термины 
единого языка 
18/38
А как без рельсов 
Бизнес-модель 
Модель 
приложения Код 
19/38
Виды технологических рельсов 
 Архитектурные 
 Инфраструктурные 
 Рельсы предметной области 
20/38
Архитектурные рельсы 
Структура приложения в крупном, например: 
Java с Hibernate и Spring 
Создаем anemic-объекты с разметкой Hibernate 
для каждого бизнес-класса, используем их так же, 
как DTO для интерфейса 
Бизнес-логику каждого класса реализуем в отдельном 
статическом классе 
Документооборот описываем через состояния объекта, 
для реализации используем StateEntity 
с декларативной таблицей состояний… 
… 
Это способ 
реализации модели в 
крупном 21/38
Инфраструктурные рельсы 
Способы реализации стандартных задач: печатных 
форм, отправки сообщений, интеграции, например: 
Все печатные формы реализуются с помощью библиотеки 
X Доступ к библиотеке – через сервис-локатор 
Для бизнес-объекта с печатной формой 
создаем класс PrintForm<TClass>, в котором каждой 
форме соответствует отдельный метод… 
На интерфейсе команды печати появляются 
автоматически, исходя из созданных классов… 
22/38
Рельсы предметной области 
Способ реализации конструкций, характерных 
для предметной области проекта, например 
документа с товарными строками: 
Строки документов хранятся в отдельных таблицах, 
однако в объектной модели доступ к ним – исключительно 
через шапки документов 
Для реализации типовой работы класс документа 
наследуем от WareDoc<TDocHeader, TDocItem>, 
что обеспечивает стандартный функционал… 
Если документ не хранит цены и стоимость, а берет их из 
справочников, реализуем стратегию PriceCalc 
… 
23/38
Как технологические рельсы 
решают описанные проблемы? 
24/38
Рельсы для печатной формы 
Задача: Для накладной надо печатать форму 
ТОРГ-12 
Задача – типовая, решение – единообразное 
Требования к решению: 
Отделить печать от бизнес-логики 
Обеспечить независимое тестирование 
Желательно обобщенное решение 
Декомпозиция кода и независимое 
тестирование – признаки хорошего стиля 
25/38
Печать форм: решение 1 
Обобщенный сервис ПечатьТорг12 
и метод НапечататьТорг12 у класса Накладная 
ПечатьТорг12 
…П 
Накладная 
ечатьТорг12поНакладной() 
… 
 Простое и очевидное решение 
 Увеличивается класс Накладная, в нем смешивается 
разнородная бизнес-логика 
 Класс Накладная зависит от сервиса печати, 
это сильно затрудняет тестирование 
26/38
Печать форм: решение 2 
Обобщенный сервис ПечатьТорг12 и сервис 
ПечатьТорг12поНакладной 
ПечатьТорг12 
Накладная 
ПечатьТорг12поНакладной 
 Логика печати вынесена из бизнес-объектов 
 Для тестирования ПечатьТорг12поНакладной 
необходима Накладная со всей инфраструктурой 
 Таких классов печати становится довольно много 
27/38
Печать форм: решение 3 
Обобщенный сервис ПечатьФормы и сервис 
ПечатьТорг12поНакладной 
ДанныеДляПечати ПечатьФормы 
Накладная ПечатьТорг12 
 Логика печати вынесена из бизнес-объектов 
 Печать и бизнес-логика тестируются независимо 
Решение применяем ко всем задачам 
печати, тогда в модели достаточно 
перечислить формы 
28/38
Расширение модельного поля 
 Диаграммы состояний для документооборота 
 Использование модели для интерфейсов 
 Задачи ведения учета 
29/38
Диаграммы состояний 
 У класса-документа есть атрибут состояние, 
описывающий текущее место в документообороте 
 В модели для документов создаем диаграмму состояний, 
на ней же показываем роли 
 В классе для каждого перехода реализуем метод, 
помечая его метаданными 
 В начале и в конце метода перехода вызываем 
PreTransit и PostTransit, которые обеспечивают 
логирование и контролируют состояние документа 
30/38
Модель для интерфейсов 
 Реализуем конструктор обобщенных интерфейсов 
на основе метаданных бизнес-объектов – таблиц 
с фильтрами для просмотра, диалогов для изменения 
 Обеспечиваем точки расширения для реализации 
дополнительной логики 
В постановках на 90% интерфейсов – списки полей 
Реализация требуется только для особых случаев 
31/38
Задачи ведения учета 
 Присутствуют в большинстве enterprise-приложений 
 Плохо описываются в терминах объектов 
Решение 
 Специальные диаграммы учета 
 Базовое учетное ядро – обобщенный учет 
 Шаблон реализации диаграмм учета на учетном ядре 
Учет описывается в адекватных терминах 
Диаграммы обеспечивают эффективное понимание 
Подробнее о диаграммах состояний и реализации учета – 
в докладе на ADD-2011 «Необъектные модели предметной области» 
32/38
Технологические рельсы 
и процесс разработки 
33/38
Аналитик и архитектор 
 В небольших проектах аналитик и архитектор – 
один человек 
 В крупных проектах аналитик создает модель, а 
архитектор проектирует техническую реализацию 
 В классическом процессе каждый из них работает 
со своей моделью 
 В DDD – совместная работа над одной моделью 
Конфликты – ответственность плохо разграничена 
34/38
Разработка «с рельсами» 
 Аналитик – создает модель и согласует ее 
 Архитектор – отвечает за технологические рельсы, 
которые обеспечивают эффективную реализацию 
 Конструкции единого языка – способ синхронизации 
модели с технологическими рельсами 
Разграничение ответственности 
Эффективность проектных решений 
обеспечивается технологическими рельсами 
Параллельная работа над проектом 
35/38
Подводя итоги 
36/38
Что достигнуто? 
Технологические рельсы: 
сочетают описание модели в понятных заказчику 
терминах со сложными техническими решениями 
помогают соблюдать ограничения, накладываемые 
фреймворками, платформами и библиотеками 
на организацию программного кода, поддерживают 
их совместную работу и однородность решений в рамках 
проекта 
Все это обеспечивает эффективную разработку 
и является залогом долгого и успешного развития 
ИТ-системы, уже находящейся в эксплуатации 
37/38
Спасибо! 
Вопросы? 
Максим Цепков 
M.Tsepkov@custis.ru

More Related Content

What's hot

Системный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПОСистемный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПО
Maxim Galimov
 
Без единого разрыва: горящие IT­сервисы и механизмы их тушения
Без единого разрыва: горящие IT­сервисы и механизмы их тушенияБез единого разрыва: горящие IT­сервисы и механизмы их тушения
Без единого разрыва: горящие IT­сервисы и механизмы их тушения
EDS Systems
 

What's hot (20)

Ddd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkovDdd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkov
 
Разделение ответственности в заказной разработке
Разделение ответственности в заказной разработкеРазделение ответственности в заказной разработке
Разделение ответственности в заказной разработке
 
Системный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПОСистемный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПО
 
Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"
 
Необъектные модели предметной области
Необъектные модели предметной областиНеобъектные модели предметной области
Необъектные модели предметной области
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революции
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
Разделение ответственности в заказной разработке
Разделение ответственности в заказной разработкеРазделение ответственности в заказной разработке
Разделение ответственности в заказной разработке
 
тестирование программного обеспечения
тестирование программного обеспечениятестирование программного обеспечения
тестирование программного обеспечения
 
Practice of enterprice development ProfsoUX-2017
Practice of enterprice development  ProfsoUX-2017Practice of enterprice development  ProfsoUX-2017
Practice of enterprice development ProfsoUX-2017
 
Опыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиОпыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурами
 
Собираем кубик Рубика
Собираем кубик РубикаСобираем кубик Рубика
Собираем кубик Рубика
 
Системная архитектура вместо требований
Системная архитектура вместо требованийСистемная архитектура вместо требований
Системная архитектура вместо требований
 
Без единого разрыва: горящие IT­сервисы и механизмы их тушения
Без единого разрыва: горящие IT­сервисы и механизмы их тушенияБез единого разрыва: горящие IT­сервисы и механизмы их тушения
Без единого разрыва: горящие IT­сервисы и механизмы их тушения
 
Роль аналитика в негибких методологиях разработки
Роль аналитика в негибких методологиях разработкиРоль аналитика в негибких методологиях разработки
Роль аналитика в негибких методологиях разработки
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требований
 
Malakhov Vladimir. BIM-7 - 5D-collision
Malakhov Vladimir. BIM-7 - 5D-collisionMalakhov Vladimir. BIM-7 - 5D-collision
Malakhov Vladimir. BIM-7 - 5D-collision
 
Будущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациямБудущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациям
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 

Similar to Ddd softwarepeople-2013-tsepkov

Развитие управления проектами и критериев качества в ит
Развитие управления проектами и критериев качества в итРазвитие управления проектами и критериев качества в ит
Развитие управления проектами и критериев качества в ит
Magneta AI
 
цепков развитие управления проектами и критериев качества в ит м. цепков-16х9
цепков   развитие управления проектами и критериев качества в ит м. цепков-16х9цепков   развитие управления проектами и критериев качества в ит м. цепков-16х9
цепков развитие управления проектами и критериев качества в ит м. цепков-16х9
Magneta AI
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
Dima Dzuba
 

Similar to Ddd softwarepeople-2013-tsepkov (20)

DDD - модель вместо требований
DDD - модель вместо требованийDDD - модель вместо требований
DDD - модель вместо требований
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
 
Развитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТРазвитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТ
 
Три точки опоры в архитектуре корпоративных систем
Три точки опоры в архитектуре корпоративных системТри точки опоры в архитектуре корпоративных систем
Три точки опоры в архитектуре корпоративных систем
 
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
Роль бизнес аналитика в разработке собственной Business Rule Engine с нуля ка...
 
Domain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требованияDomain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требования
 
Roles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkovRoles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkov
 
Constructor
ConstructorConstructor
Constructor
 
Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)Проектирование больших ИС в Agile (статья)
Проектирование больших ИС в Agile (статья)
 
Развитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТРазвитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТ
 
Как выжить глобальной корпорации?
Как выжить глобальной корпорации?Как выжить глобальной корпорации?
Как выжить глобальной корпорации?
 
Развитие управления проектами и критериев качества в ит
Развитие управления проектами и критериев качества в итРазвитие управления проектами и критериев качества в ит
Развитие управления проектами и критериев качества в ит
 
Киев, BA Con 2017
Киев, BA Con 2017Киев, BA Con 2017
Киев, BA Con 2017
 
Big picture of it project managerment Tsepkov AgileDays 2015
Big picture of it project managerment Tsepkov AgileDays 2015Big picture of it project managerment Tsepkov AgileDays 2015
Big picture of it project managerment Tsepkov AgileDays 2015
 
цепков развитие управления проектами и критериев качества в ит м. цепков-16х9
цепков   развитие управления проектами и критериев качества в ит м. цепков-16х9цепков   развитие управления проектами и критериев качества в ит м. цепков-16х9
цепков развитие управления проектами и критериев качества в ит м. цепков-16х9
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахКак совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
 
САПР и ГИС
САПР и ГИССАПР и ГИС
САПР и ГИС
 
И.Беспальчук -- оценка архитектуры по ATAM
И.Беспальчук -- оценка архитектуры по ATAMИ.Беспальчук -- оценка архитектуры по ATAM
И.Беспальчук -- оценка архитектуры по ATAM
 
Опыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектурыОпыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектуры
 

More from Maxim Tsepkov

Agile and the Third Wave (IT Spring 2017)
Agile and the Third Wave (IT Spring 2017)Agile and the Third Wave (IT Spring 2017)
Agile and the Third Wave (IT Spring 2017)
Maxim Tsepkov
 
Agile - ответ на вызовы третьей промышленной революции - цепков custis
Agile - ответ на вызовы третьей промышленной революции - цепков custisAgile - ответ на вызовы третьей промышленной революции - цепков custis
Agile - ответ на вызовы третьей промышленной революции - цепков custis
Maxim Tsepkov
 
Spiral dynamics InUse Tsepkov Testclub 2014-07
Spiral dynamics InUse Tsepkov Testclub 2014-07Spiral dynamics InUse Tsepkov Testclub 2014-07
Spiral dynamics InUse Tsepkov Testclub 2014-07
Maxim Tsepkov
 

More from Maxim Tsepkov (20)

From Agile to Teal Organization PRyug-2017
From Agile to Teal Organization PRyug-2017From Agile to Teal Organization PRyug-2017
From Agile to Teal Organization PRyug-2017
 
Самоопределяйся технологично!
Самоопределяйся технологично!Самоопределяйся технологично!
Самоопределяйся технологично!
 
Agile and the Third Wave (IT Spring 2017)
Agile and the Third Wave (IT Spring 2017)Agile and the Third Wave (IT Spring 2017)
Agile and the Third Wave (IT Spring 2017)
 
Accounting diagram - Tsepkov EconConf-2017
Accounting diagram - Tsepkov EconConf-2017Accounting diagram - Tsepkov EconConf-2017
Accounting diagram - Tsepkov EconConf-2017
 
Choose method for requirements Tsepkov Analyst Days-2017
Choose method for requirements Tsepkov Analyst Days-2017Choose method for requirements Tsepkov Analyst Days-2017
Choose method for requirements Tsepkov Analyst Days-2017
 
Agile - ответ на вызовы третьей промышленной революции - цепков custis
Agile - ответ на вызовы третьей промышленной революции - цепков custisAgile - ответ на вызовы третьей промышленной революции - цепков custis
Agile - ответ на вызовы третьей промышленной революции - цепков custis
 
Use OOP for domain ontology WIAD-2017
Use OOP for domain ontology WIAD-2017Use OOP for domain ontology WIAD-2017
Use OOP for domain ontology WIAD-2017
 
Agile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектахAgile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектах
 
Как понять, подходит ли Agile вашей компании
Как понять, подходит ли Agile вашей компанииКак понять, подходит ли Agile вашей компании
Как понять, подходит ли Agile вашей компании
 
Ответственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахОтветственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектах
 
Process and Case Management together (SECR-2016)
Process and Case Management together (SECR-2016)Process and Case Management together (SECR-2016)
Process and Case Management together (SECR-2016)
 
Эволюция организаций и эволюция сотрудника – как изменяется понятие о прави...
Эволюция организаций и эволюция сотрудника – как изменяется понятие о прави...Эволюция организаций и эволюция сотрудника – как изменяется понятие о прави...
Эволюция организаций и эволюция сотрудника – как изменяется понятие о прави...
 
Process and Case Management together
Process and Case Management togetherProcess and Case Management together
Process and Case Management together
 
Taxonomy vs folksonomy Tsepkov Analyst Days 2016
Taxonomy vs folksonomy Tsepkov Analyst Days 2016Taxonomy vs folksonomy Tsepkov Analyst Days 2016
Taxonomy vs folksonomy Tsepkov Analyst Days 2016
 
Agile то что на самом деле нужно госзаказчикам - Максим Цепков на AgileDays-2016
Agile то что на самом деле нужно госзаказчикам - Максим Цепков на AgileDays-2016Agile то что на самом деле нужно госзаказчикам - Максим Цепков на AgileDays-2016
Agile то что на самом деле нужно госзаказчикам - Максим Цепков на AgileDays-2016
 
действуй опираясь на ценности а не просто применяй инструменты максим цепков
действуй опираясь на ценности а не просто применяй инструменты максим цепковдействуй опираясь на ценности а не просто применяй инструменты максим цепков
действуй опираясь на ценности а не просто применяй инструменты максим цепков
 
Responsibilities in software development tsepkov analyst days 2015
Responsibilities in software development tsepkov analyst days 2015Responsibilities in software development tsepkov analyst days 2015
Responsibilities in software development tsepkov analyst days 2015
 
Spiral dynamics in use tsepkov sqadays-16
Spiral dynamics in use tsepkov sqadays-16Spiral dynamics in use tsepkov sqadays-16
Spiral dynamics in use tsepkov sqadays-16
 
Spiral dynamics InUse Tsepkov Testclub 2014-07
Spiral dynamics InUse Tsepkov Testclub 2014-07Spiral dynamics InUse Tsepkov Testclub 2014-07
Spiral dynamics InUse Tsepkov Testclub 2014-07
 
You and Сustomer: Solve problems Tsepkov Myasnikov Uzhevko SQAdays-15
You and Сustomer: Solve problems Tsepkov Myasnikov Uzhevko SQAdays-15You and Сustomer: Solve problems Tsepkov Myasnikov Uzhevko SQAdays-15
You and Сustomer: Solve problems Tsepkov Myasnikov Uzhevko SQAdays-15
 

Ddd softwarepeople-2013-tsepkov

  • 1. DDD: проблемы и решения при отражении модели предметной области в код Максим Цепков, главный архитектор, группа компаний CUSTIS
  • 2. О чем этот доклад? В применении любой методологии есть этапы Смотрим примеры – в них все хорошо Применяем, решая возникающие проблемы Осмысливаем опыт решения, развивая метод DDD – не исключение В докладе речь пойдет о нашем опыте решения проблем, возникающих при применении DDD в сложных проектах 2/38
  • 3. План доклада 1. Идея и внутренние противоречия DDD 2. Проблемы при использовании DDD 3. Технологические рельсы – наш способ решения 4. Адаптация процесса разработки 5. Достигнутые преимущества 3/38
  • 4. Идея и внутренние противоречия DDD 4/38
  • 5. DDD – как оно начиналось Концептуальная книга Эрика Эванса • на английском – в 2003 г. • на русском – только в 2010 г. Практическая книга Джимми Нильссона • на английском – в 2006 г. • на русском – в 2007 г. (почти сразу!) 5/38
  • 6. Основная идея DDD Бизнес- аналитик Бизнес- модель Системный аналитик, архитектор Разработчик Модель приложения Код Заказчик Аналитики и архитектор Разработчик Модель на едином языке Код РАНЬШЕ DDD Заказчик Переход к единственной модели на едином языке решил много старых проблем, но породил новые 6/38
  • 7. Плюсы модели на едином языке  Единое поле коммуникаций для всех участников проекта  Верификация модели заказчиком и выявление наиболее критичных ошибок на этапе постановок  Простота внесения изменений в требования: их не надо протаскивать через несколько моделей  Гибкость реагирования на ограничения, выявляемые при разработке: их можно передать заказчику посредством модели и найти решения 7/38
  • 8. Подробнее о DDD О преимуществах единственной модели на едином языке я рассказывал в докладах на конференциях: «DDD: Реализуем проект Вавилонская башня» (Software People – 2012) «DDD — эффективный способ работы в условиях системной (SECR – 2011) 8/38
  • 9. Проблемы при использовании одной модели Потому две модели и использовали  Необходимость понимания модели заказчиком существенно ограничивает моделирование  Технические подробности и сложные формальные методы становятся недопустимы  А без них модель не может служить проектом для реализации, нужно дополнительное проектирование Единственная модель на едином языке – и преимущество DDD, и источник проблем 9/38
  • 10. Стандартные пути решения проблем  ООП – общепринятый и (на простом уровне) интуитивно понятный метод  Модель, сделанная в объектной парадигме, может быть представлена заказчику и согласована с ним  Современные языки поддерживают ООП, модель хорошо реализуется с использованием шаблонов Domain model и Rich objects Этот способ работает, но ограниченно. Простого ООП не хватает, а изучать сложный заказчики не считают правильным 10/38
  • 11. Простое применение DDD  На основе требований создаем объектную модель • структура классов • поведение объектов • интерфейсы  Согласуем ее с заказчиком  Реализуем в коде на основе шаблонов Domain model и Rich objects Что получается? 11/38
  • 12. Проблемы при использовании DDD Практические аспекты 12/38
  • 13. Большие и сложные объекты  Бизнес-объект включает все аспекты деятельности • Клиент – как субъект делового мира, партнер по сделкам, взаимоотношения юридические и управленческие • Заказ – полный жизненный цикл от начальных переговоров до исполнения, включая юридическое и другое оформление  Бизнес-объекты тесно связаны между собой При отражении в IT-объекты получается очень похоже на антипаттерн Big Object Сложно понимать, развивать, тестировать 13/38
  • 14. Техническое усложнение модели  Принципы ООП побуждают к декомпозиции, что увеличивает число объектов  Применение шаблонов (стратегии и др.)  Технические и инфраструктурные атрибуты и классы  Ограничения на объекты со стороны фреймворков и обходные пути для их преодоления Сложная модель не понимается заказчиком, простая – не отражает реализацию 14/38
  • 15. Ограниченная область DDD-модели  Подход разрабатывался для слоя бизнес-логики  Использование объектных языков побуждает ограничиться объектными моделями Хочется  Использовать модель при проектировании интерфейсов  Расширять способы моделирования 15/38
  • 16. Решение – технологические рельсы Отделяем технологические аспекты от модели 16/38
  • 17. Что такое технологические рельсы Технологические рельсы – это способ перевода модели на едином языке в код Платформы, фреймворки и библиотеки Способы их организации в единое приложение Способы отражения модели приложения в код Типовые задачи и design patterns для их реализации Формулируются на всех уровнях – от архитектуры до частных задач посылки сообщения «Применяем Domain model и Rich Objects» – частный случай технологических рельсов 17/38
  • 18. Технологические рельсы (шаблоны реализации) По рельсам  Модель на едином языке Код Термины единого языка 18/38
  • 19. А как без рельсов Бизнес-модель Модель приложения Код 19/38
  • 20. Виды технологических рельсов  Архитектурные  Инфраструктурные  Рельсы предметной области 20/38
  • 21. Архитектурные рельсы Структура приложения в крупном, например: Java с Hibernate и Spring Создаем anemic-объекты с разметкой Hibernate для каждого бизнес-класса, используем их так же, как DTO для интерфейса Бизнес-логику каждого класса реализуем в отдельном статическом классе Документооборот описываем через состояния объекта, для реализации используем StateEntity с декларативной таблицей состояний… … Это способ реализации модели в крупном 21/38
  • 22. Инфраструктурные рельсы Способы реализации стандартных задач: печатных форм, отправки сообщений, интеграции, например: Все печатные формы реализуются с помощью библиотеки X Доступ к библиотеке – через сервис-локатор Для бизнес-объекта с печатной формой создаем класс PrintForm<TClass>, в котором каждой форме соответствует отдельный метод… На интерфейсе команды печати появляются автоматически, исходя из созданных классов… 22/38
  • 23. Рельсы предметной области Способ реализации конструкций, характерных для предметной области проекта, например документа с товарными строками: Строки документов хранятся в отдельных таблицах, однако в объектной модели доступ к ним – исключительно через шапки документов Для реализации типовой работы класс документа наследуем от WareDoc<TDocHeader, TDocItem>, что обеспечивает стандартный функционал… Если документ не хранит цены и стоимость, а берет их из справочников, реализуем стратегию PriceCalc … 23/38
  • 24. Как технологические рельсы решают описанные проблемы? 24/38
  • 25. Рельсы для печатной формы Задача: Для накладной надо печатать форму ТОРГ-12 Задача – типовая, решение – единообразное Требования к решению: Отделить печать от бизнес-логики Обеспечить независимое тестирование Желательно обобщенное решение Декомпозиция кода и независимое тестирование – признаки хорошего стиля 25/38
  • 26. Печать форм: решение 1 Обобщенный сервис ПечатьТорг12 и метод НапечататьТорг12 у класса Накладная ПечатьТорг12 …П Накладная ечатьТорг12поНакладной() …  Простое и очевидное решение  Увеличивается класс Накладная, в нем смешивается разнородная бизнес-логика  Класс Накладная зависит от сервиса печати, это сильно затрудняет тестирование 26/38
  • 27. Печать форм: решение 2 Обобщенный сервис ПечатьТорг12 и сервис ПечатьТорг12поНакладной ПечатьТорг12 Накладная ПечатьТорг12поНакладной  Логика печати вынесена из бизнес-объектов  Для тестирования ПечатьТорг12поНакладной необходима Накладная со всей инфраструктурой  Таких классов печати становится довольно много 27/38
  • 28. Печать форм: решение 3 Обобщенный сервис ПечатьФормы и сервис ПечатьТорг12поНакладной ДанныеДляПечати ПечатьФормы Накладная ПечатьТорг12  Логика печати вынесена из бизнес-объектов  Печать и бизнес-логика тестируются независимо Решение применяем ко всем задачам печати, тогда в модели достаточно перечислить формы 28/38
  • 29. Расширение модельного поля  Диаграммы состояний для документооборота  Использование модели для интерфейсов  Задачи ведения учета 29/38
  • 30. Диаграммы состояний  У класса-документа есть атрибут состояние, описывающий текущее место в документообороте  В модели для документов создаем диаграмму состояний, на ней же показываем роли  В классе для каждого перехода реализуем метод, помечая его метаданными  В начале и в конце метода перехода вызываем PreTransit и PostTransit, которые обеспечивают логирование и контролируют состояние документа 30/38
  • 31. Модель для интерфейсов  Реализуем конструктор обобщенных интерфейсов на основе метаданных бизнес-объектов – таблиц с фильтрами для просмотра, диалогов для изменения  Обеспечиваем точки расширения для реализации дополнительной логики В постановках на 90% интерфейсов – списки полей Реализация требуется только для особых случаев 31/38
  • 32. Задачи ведения учета  Присутствуют в большинстве enterprise-приложений  Плохо описываются в терминах объектов Решение  Специальные диаграммы учета  Базовое учетное ядро – обобщенный учет  Шаблон реализации диаграмм учета на учетном ядре Учет описывается в адекватных терминах Диаграммы обеспечивают эффективное понимание Подробнее о диаграммах состояний и реализации учета – в докладе на ADD-2011 «Необъектные модели предметной области» 32/38
  • 33. Технологические рельсы и процесс разработки 33/38
  • 34. Аналитик и архитектор  В небольших проектах аналитик и архитектор – один человек  В крупных проектах аналитик создает модель, а архитектор проектирует техническую реализацию  В классическом процессе каждый из них работает со своей моделью  В DDD – совместная работа над одной моделью Конфликты – ответственность плохо разграничена 34/38
  • 35. Разработка «с рельсами»  Аналитик – создает модель и согласует ее  Архитектор – отвечает за технологические рельсы, которые обеспечивают эффективную реализацию  Конструкции единого языка – способ синхронизации модели с технологическими рельсами Разграничение ответственности Эффективность проектных решений обеспечивается технологическими рельсами Параллельная работа над проектом 35/38
  • 37. Что достигнуто? Технологические рельсы: сочетают описание модели в понятных заказчику терминах со сложными техническими решениями помогают соблюдать ограничения, накладываемые фреймворками, платформами и библиотеками на организацию программного кода, поддерживают их совместную работу и однородность решений в рамках проекта Все это обеспечивает эффективную разработку и является залогом долгого и успешного развития ИТ-системы, уже находящейся в эксплуатации 37/38
  • 38. Спасибо! Вопросы? Максим Цепков M.Tsepkov@custis.ru