SlideShare a Scribd company logo
Domain Driven Design
от требований до кода
Максим Цепков
www.facebook.com/mtsepkov
SECON’14
SECON’14
 Перенос подходов разработки на анализ
расширить?
 Подумать про тестирование и внедрение
Идеи доработки
2/56
SECON’14
 Есть разные способы ведения разработки
 Выбор конкретного – зависит от проекта
 В сложных проектах уместна работа с моделями
 И DDD – наиболее эффективный способ для этого
О чем этот доклад?
DDD – ключ к построению сложных систем
и их развитию вслед за потребностями бизнеса
3/56
SECON’14
 Требования
 Проектирование
 Реализация
 Внедрение
 Развитие системы
DDD – на полном жизненном цикле
4/56
http://en.wikipedia.org/wiki/V-Model_(software_development)
Не только модель
но и эффективные
коммуникации
SECON’14
Схема доклада
5/56
Часть 1
Проектирование модели
Detailed
Design
Implementation
Integration
and Test
MaintenanceConcept
Requirements
and
Architecture
System
Verification
Заключение – профит
Часть 2
От Модели до Кода
SECON’14
6/56
Часть 1
Проектирование
модели
Detailed
Design
Implementation
Integration
and Test
MaintenanceConcept
Requirements
and
Architecture
System
Verification
Заключение – профит
Часть 1. Проектирование модели
Часть 2
От Модели до Кода
SECON’14
Теория
DDD – единый язык проекта и одна модель системы
• Модели были давно, но две: бизнес-область и система
• Единый язык проекта создает общее поле понятий
• И позволяет работать с одной, общей моделью
Практика
• Единый язык и построение Модели в конкретных примерах
• Практики проектирования – на этап бизнес-анализа
Проектирование в DDD
7/56
SECON’14
DDD – как оно начиналось
 Концептуальная книга Эрика Эванса
• на английском – в 2003 г.
• на русском – только в 2010 г.
Практическая книга Джимми Нильссона
• на английском – в 2006 г.
• на русском – в 2007 г. (почти сразу!)
8/56
SECON’14
О едином языке
9/56
SECON’14
Основная идея DDD
Бизнес-
модель
Бизнес-
аналитик
Модель
приложения
Код
Системный
аналитик,
архитектор
Разработчик
Заказчик
Модель на едином языке Код
Аналитики и архитектор
Разработчик
РАНЬШЕ
DDD
Заказчик
10/56
SECON’14
 Построен на основе терминов предметной области
 Его понимают ИТ-специалисты и эксперты бизнеса
 На нем описана модель ИТ-системы и ее место в
бизнес-процессах
Единый язык (ubiquitous language)
Понятия единого языка:
Клиент, Накладная, платеж, Долг –
из предметной области
11/56
SECON’14
Модель системы не соответствует представлению
бизнеса о ее месте в модели предприятия.
Зачем нужен единый язык?
Модель предприятия
Представление
о месте
ИТ-системы
Модель
ИТ-системы
«Не то чтобы совсем не попал,
но только не попал в шарик…»
12/56
SECON’14
Единый язык позволяет совместить модель системы
с представлениями бизнеса о ее месте
Итерационное развитие модели
ИТ-система
Модель
ИТ-системы
Место ИТ
в бизнес-процессе
Управляющее воздействие
на модель
Итерация
13/56
SECON’14
 Аналитик собирает требования и строит модель –
сначала предметной области, затем – системы
 Артефакты модели описывают и систему и ее
использование в бизнес-процессах предприятия
 Разработчик реализует модель
 Артефакты модели можно проследить в коде
Единая модель
Модель предметной области
становится моделью системы
14/56
SECON’14
 Верификация постановок бизнес-специалистами
 Общее понимание требований на стороне бизнеса
 Обсуждение модели бизнесом и IT, поиск баланса в
сложных решениях
 Перенос моделей из других предметных областей
 Бизнес представляет потенциальные возможности
системы и сложность различных доработок
 На этапе эксплуатации – эффективное общение
бизнес-пользователей и IT без квалифицированных
переводчиков-аналитиков
Что мы достигаем?
15/56
SECON’14
А где здесь ООП?
16/56
SECON’14
Парадигма моделирования определяет
 Элементы языка
 Способ их соединения в сложные конструкции
 Визуальный образ для представления
 Способ отражения модели в код
ООП – парадигма моделирования
Объекты
с атрибутами
и методами
Диаграмма классов и
другие UML-диаграммы
Типы, соответствующие
бизнес-объектам
17/56
SECON’14
Классы соответствуют бизнес-объектам –
заказчик видит знакомые названия
Модель должен понимать заказчик
18/56
Используем
цветовые
выделения
SECON’14
 Не нужно
• Стараться изобразить все
классы на одной диаграмме
• Отображать
вспомогательные атрибуты
• Использовать технические
коды
• Использовать сложную
нотацию
 Диаграммы должны
понимать заказчики, а
не только разработчики
Не нужно усложнять диаграмму
19/56
SECON’14
Пример:
Виза на документы
20/56
SECON’14
В процессе обработки документа (сделки, договора,
контракта) обеспечить проверку и одобрение
определенными сотрудниками или отделами
Задача
Задача касается
конкретного документа
21/56
SECON’14
Выбор проектного решения
Существует несколько
типовых шаблонов
Каждая виза – со своим
жизненным циклом
22/56
SECON’14
 Шаблоны обладают разной гибкостью и сложностью
 Для выбора нужно понимать требуемый баланс
между гибкостью и сложностью решения
Традиционный подход
 На этапе сбора требований аналитики
формулируют задачу для конкретного документа
 Исходя из этого в системе проектируется решение
 Выбранное решение отражает текущую ситуацию
В чем проблема?
Решение надо принимать с учетом
потенциального изменения бизнес-процессов
23/56
SECON’14
 Проверка сделки казначейством и отделом рисков –
не получается выполнять параллельно
 Юристы отозвали одобрение кредита, а служба
безопасности на него опиралась – связи между
визами не контролируются системой
 Настройку виз для одобрения договоров с
недвижимостью передали в IT из-за сложности
Примеры
24/56
SECON’14
 Представляем шаблоны, описанные применительно
к конкретному документу, показываем разницу
 Бизнес-специалисты оценивают потенциальную
потребность в реализации бизнес-процессов
 Решение принимается с учетом перспективы
Решение в рамках DDD
25/56
SECON’14
 Для решения модель надо описать понятно бизнесу
• Можно описать обобщенные решения для документов,
«состояния» и «визы», и на них ссылаться
• Можно описывать каждый случай отдельно
 Термины должны быть понятны Заказчику:
Например, «визированием» могут считать одобрение документа,
требующее только просмотра, а если требуется дополнительная
работа, то это называется «обработкой» или «проверкой»
 Общий шаблон надо «перевести» на язык проекта
В чем Единый язык?
26/56
SECON’14
 Мы используем известные шаблоны решений
 Заказчик оценивает вариант решения не только с
точки зрения текущих потребностей, но и из
предположений о развитии бизнес-процессов
 Проектируя изменения бизнес-процессов, заказчик
представляет потенциал гибкости системы и
принимает решения с учетом этого
Результат
27/56
SECON’14
Пример:
Обобщенный документооборот
28/56
SECON’14
 Документ обрабатывается в несколько этапов.
 На каждом этапе определенные сотрудники
могут совершать определенные действия.
 Для передачи на следующий этап должны
выполняться определенные условия.
Обобщенный документооборот
29/56
SECON’14
 Документу приписываем состояние.
 Состояние определяет этап документооборота:
• какие действия можно совершать над документом;
• кто отвечает за обработку документа;
• кто имеет права на совершение тех или иных действий.
 Возможные изменения состояний документа
образуют граф переходов.
Модель для документооборота
Вместо множества атрибутов используем
один, определяющий фазу жизненного цикла
30/56
SECON’14
 Документ – объект предметной
области.
 Действие над ним – вызов его метода.
 Среди всех методов выделяем
переходы и связываем их
с состояниями.
 Граф состояний – State machine
diagram.
Язык модели
UML
Язык ООП «с расширениями».
Названия состояний и переходов –
на языке бизнеса.
31/56
SECON’14
Наглядно представляет
сложный документооборот
32/56
SECON’14
Практики проектирования –
на этап бизнес-анализа
33/56
SECON’14
 Стратегии
 Политики
 Выделение общих объектов
 Абстракция через интерфейсы
Частные практики
Технические практики наполняются бизнес-
смыслом и служат для общения с Заказчиком
34/56
SECON’14
Перенос практик декомпозиции на бизнес-анализ
 Понятие ограниченных контекстов
 Различные варианты выделение общего
• Общее ядро
• Абстрактное ядро
• Подключаемые компоненты
• Крупноблочная структура
• Уровни разделения обязанностей
 Изоляция и карта контекстов
Контексты
35/56
SECON’14
Часть 2. От модели до Кода
36/56
Часть 2
От Модели до Кода
Detailed
Design
Implementation
Integration
and Test
MaintenanceConcept
Requirements
and
Architecture
System
Verification
Заключение – профит
Часть 1
Проектирование модели
SECON’14
 Язык, реализующий парадигму
 Framework, часто с диаграммами,
например, MS Workflow Foundation
для реализации документооборота
 DSL, лучше графический,
с компилятором или интерпретатором
 Диаграммы и понятия единого языка
и шаблоны их отражения в реализацию
Как отражать модель в реализацию
37/56
Если нет готового –
приходится разрабатывать
SECON’14
 На основе требований создаем объектную модель
• структура классов
• поведение объектов
• интерфейсы
 Согласуем ее с заказчиком
 Реализуем в коде на основе шаблонов
Domain model и Rich objects
Что получается?
Простое применение DDD
38/38
SECON’14
 Соответствует парадигме современных языков
 Понятна разработчикам и аналитикам
 Имеет эффективные визуальное представление
 Соответствует реальному миру и понимается
заказчиком – если проектировать бизнес-объекты
Достоинства объектной модели
39/56
SECON’14
 ООП – общепринятый и (на простом уровне)
интуитивно понятный метод
 Модель, сделанная в объектной парадигме, может
быть представлена заказчику и согласована с ним
 Современные языки поддерживают ООП,
модель хорошо реализуется с использованием
шаблонов Domain model и Rich objects
Достоинства DDD с ООП
Этот способ работает, но ограниченно.
Простого ООП не хватает, а изучать сложный
заказчики не считают правильным
40/38
SECON’14
Документооборот и State Entity
41/56
SECON’14
 Документу приписываем состояние
 Состояние определяет этап документооборота:
• какие действия можно совершать над документом
• кто отвечает за обработку документ
• кто имеет права на совершение тех или иных действий
 Возможные изменения состояний документа
образуют граф переходов
Напомним решение
42/56
Шаблон State Entity
SECON’14
Из книги Нильссона
Варианты шаблона реализации
43/56
SECON’14
Из книги Нильссона
1. Императивно в коде конкретных методов
Варианты шаблона реализации
44/56
SECON’14
Из книги Нильссона
1. Императивно в коде конкретных методов
2. Императивно в едином методе
смены состояния
Варианты шаблона реализации
45/56
SECON’14
Из книги Нильссона
1. Императивно в коде конкретных методов
2. Императивно в едином методе смены состояния
3. Декларативно – через таблицу переходов и состояний
Варианты шаблона реализации
46/56
SECON’14
Из книги Нильссона
1. Императивно в коде конкретных методов
2. Императивно в едином методе смены состояния
3. Декларативно – через таблицу переходов и состояний
4. Через иерархию классов-состояний
Варианты шаблона реализации
47/56
SECON’14
Модель должна прозрачно отражаться в реализацию
 Используем декларативное описание (3)
 Или комбинацию (1) и (3):
• императивно изменяем состояние в методе перехода
• контролируем, что изменение соответствует декларативной
разметке
 Таблица метаданных – декларативное описание –
однозначно соответствует диаграмме состояний
Что выбрать?
48/56
SECON’14
 Иерархия классов-состояний – в объектной модели
• Полнее выразить реализацию в диаграмме классов
• Но поведение документа – за рамками, оно только в графе
переходов
• Поэтому для единого языка, понимаемого заказчиком – не
подходит
Почему не иерархия состояний?
49/56
SECON’14
 Иерархия классов-состояний – в объектной модели
• Полнее выразить реализацию в диаграмме классов
• Но поведение документа – за рамками, оно только в графе
переходов
• Поэтому для единого языка, понимаемого заказчиком – не
подходит
 Реализация через метаданные
• Таблица переходов отражает поведение документа в коде
• И однозначно соответствует диаграмме переходов
• Диаграмма переходов понимается заказчиком – единый язык
• При этом иерархия состояний становится излишней
• Однако, реализация требует выхода из объектной модели
Почему не иерархия состояний?
50/56
SECON’14
Сравним модели…
51/56
Диаграмма состояний
Диаграмма классов
Это – лишнее
SECON’14
 Отдельный проект
• Инициализация таблицы переходов для каждого документа
• Общая функция проверки перехода для всех методов
(вместе с логом)
• Таблица допустимых действий для каждого состояния (тоже
с логом)
 Собственный объектный framework в Oracle
• Таблица переходов и прав в метаданных
• Вызов процедур-методов динамически с проверками
Реализация на разных платформах
52/56
SECON’14
Собственный фреймворк на C#
 Разметка методов метаданными – состояния, права
 Описание в метаданных графа состояний и условий
 Обработка на посткомпиляции при создании
реализации
Реализация на разных платформах
53/56
[Method(AutoSave = true)]
[StateRestriction(RequestForShipmentState.New)]
[StateTransition(RequestForShipmentState.New, RequestForShipmentState.Created)]
[GrantInvocation(RmsRole.Manager)]
public virtual void PrepareForShipment()
{
State = RequestForShipmentState.Created;
...
SECON’14
Проблемы при стандартном
отражении модели в код
54/56
SECON’14
 Технические подробности и сложные формальные
методы становятся недопустимы
 А без них модель не может служить проектом
для реализации, нужно дополнительное
проектирование
Проблемы при использовании
одной модели
Потому две модели
и использовали
Единственная модель на едином языке –
и преимущество DDD, и источник проблем
 Необходимость понимания
модели заказчиком существенно
ограничивает моделирование
55/38
SECON’14
 Бизнес-объект включает все аспекты деятельности
• Клиент – как субъект делового мира, партнер по сделкам,
взаимоотношения юридические и управленческие
• Заказ – полный жизненный цикл от начальных переговоров
до исполнения, включая юридическое и другое оформление
 Бизнес-объекты тесно связаны между собой
 При отражении в IT-объекты получается очень
похоже на антипаттерн Big Object
 Сложно понимать, развивать, тестировать
Большие и сложные объекты
56/38
SECON’14
 Принципы ООП побуждают к декомпозиции,
что увеличивает число объектов
 Применение шаблонов (стратегии и др.)
 Технические и инфраструктурные атрибуты
и классы
 Ограничения на объекты со стороны фреймворков
и обходные пути для их преодоления
 Сложная модель не понимается заказчиком,
простая – не отражает реализацию
Техническое усложнение модели
57/38
SECON’14
 Подход разрабатывался для слоя бизнес-логики
 Использование объектных языков побуждает
ограничиться объектными моделями
Хочется
 Использовать модель при проектировании
интерфейсов
 Расширять способы моделирования
Ограниченная область DDD-модели
58/38
SECON’14
Решение –
технологические рельсы
59/56
Отделяем технологические
аспекты от модели
SECON’14
Технологические рельсы – это способ перевода
модели на едином языке в код
 Платформы, фреймворки и библиотеки
 Способы их организации в единое приложение
 Способы отражения модели приложения в код
 Типовые задачи и design patterns для их реализации
Формулируются на всех уровнях – от архитектуры
до частных задач посылки сообщения
Что такое технологические рельсы
«Применяем Domain model и Rich Objects» –
частный случай технологических рельсов
60/38
SECON’14
Модель
на едином языке Код
Термины
единого языка
Технологические рельсы
(шаблоны реализации)
По рельсам 
61/38
SECON’14
Бизнес-модель
Модель
приложения Код
А как без рельсов
62/38
SECON’14
 Архитектурные
 Инфраструктурные
 Рельсы предметной области
Виды технологических рельсов
63/38
SECON’14
Структура приложения в крупном, например:
 Java с Hibernate и Spring
 Создаем anemic-объекты с разметкой Hibernate
для каждого бизнес-класса, используем их так же,
как DTO для интерфейса
 Бизнес-логику каждого класса реализуем в отдельном
статическом классе
 Документооборот описываем через состояния
объекта, для реализации используем StateEntity
с декларативной таблицей состояний…
 …
Архитектурные рельсы
Это способ реализации
модели в крупном
64/38
SECON’14
Способы реализации стандартных задач: печатных
форм, отправки сообщений, интеграции, например:
 Все печатные формы реализуются с помощью
библиотеки X
 Доступ к библиотеке – через сервис-локатор
 Для бизнес-объекта с печатной формой
создаем класс PrintForm<TClass>, в котором каждой
форме соответствует отдельный метод…
 На интерфейсе команды печати появляются
автоматически, исходя из созданных классов…
Инфраструктурные рельсы
65/38
SECON’14
Способ реализации конструкций, характерных
для предметной области проекта, например
документа с товарными строками:
 Строки документов хранятся в отдельных таблицах,
однако в объектной модели доступ к ним –
исключительно через шапки документов
 Для реализации типовой работы класс документа
наследуем от WareDoc<TDocHeader, TDocItem>,
что обеспечивает стандартный функционал…
 Если документ не хранит цены и стоимость, а берет их
из справочников, реализуем стратегию PriceCalc
 …
Рельсы предметной области
66/38
SECON’14
Пример.
Печать накладной
67/56
SECON’14
Задача: Для накладной надо печатать форму
ТОРГ-12
Задача – типовая, решение – единообразное
Требования к решению:
 Отделить печать от бизнес-логики
 Обеспечить независимое тестирование
 Желательно обобщенное решение
Рельсы для печатной формы
Декомпозиция кода и независимое
тестирование – признаки хорошего стиля
68/38
SECON’14
Обобщенный сервис ПечатьТорг12
и метод НапечататьТорг12 у класса Накладная
 Простое и очевидное решение
 Увеличивается класс Накладная, в нем смешивается
разнородная бизнес-логика
 Класс Накладная зависит от сервиса печати,
это сильно затрудняет тестирование
Печать форм: решение 1
ПечатьТорг12
…
ПечатьТорг12поНакладной()
…
Накладная
69/38
SECON’14
Обобщенный сервис ПечатьТорг12 и сервис
ПечатьТорг12поНакладной
 Логика печати вынесена из бизнес-объектов
 Для тестирования ПечатьТорг12поНакладной
необходима Накладная со всей инфраструктурой
 Таких классов печати становится довольно много
Печать форм: решение 2
ПечатьТорг12
ПечатьТорг12поНакладной
Накладная
70/38
SECON’14
Обобщенный сервис ПечатьФормы и сервис
ПечатьТорг12поНакладной
 Логика печати вынесена из бизнес-объектов
 Печать и бизнес-логика тестируются независимо
Печать форм: решение 3
ПечатьФормыДанныеДляПечати
ПечатьТорг12Накладная
Решение применяем ко всем задачам
печати, тогда в модели достаточно перечислить
формы
71/38
SECON’14
Расширение модельного ряда
72/56
SECON’14
По опыту разработки
корпоративных приложений
 Плохо представляет цикл жизни объекта
 Плохо подходит для отражения потоков ресурсов
 Плохо подходит для систем связанных показателей
Если для области автоматизации эти аспекты важны,
можно применять другие парадигмы
Недостатки объектной модели
73/56
SECON’14
 У класса-документа есть атрибут состояние,
описывающий текущее место в документообороте
 В модели для документов создаем диаграмму
состояний, на ней же показываем роли
 В классе для каждого перехода реализуем метод,
помечая его метаданными
 В начале и в конце метода перехода вызываем
PreTransit и PostTransit, которые обеспечивают
логирование и контролируют состояние документа
Диаграммы состояний
74/38
SECON’14
 Реализуем конструктор обобщенных интерфейсов
на основе метаданных бизнес-объектов – таблиц
с фильтрами для просмотра, диалогов для изменения
 Обеспечиваем точки расширения для реализации
дополнительной логики
 В постановках на 90% интерфейсов – списки полей
 Реализация требуется только для особых случаев
Модель для интерфейсов
75/38
SECON’14
 Выбрать или придумать парадигму моделирования
• Объекты обмениваются сообщениями
• Ресурс выделяется действующим лицам
 Определить визуальный образ единого языка
• Диаграммы взаимодействия и синхронизации
• Образ разрезания пиццы
 Разработать правила отражения модели в код –
иначе элементы модели не найти в реализации
 Лучше, если отражение будет по шаблонам
Как сделать необъектную модель?
76/56
SECON’14
 Присутствуют в большинстве enterprise-приложений
 Плохо описываются в терминах объектов
Решение
 Специальные диаграммы учета
 Базовое учетное ядро – обобщенный учет
 Шаблон реализации диаграмм учета на учетном ядре
 Учет описывается в адекватных терминах
 Диаграммы обеспечивают эффективное понимание
Подробнее о диаграммах состояний и реализации учета –
в докладе на ADD-2011 «Необъектные модели предметной области»
Задачи ведения учета
77/38
SECON’14
Заключение – профит
78/56
Detailed
Design
Implementation
Integration
and Test
MaintenanceConcept
Requirements
and
Architecture
System
Verification
Заключение – профит
Часть 2
От Модели до Кода
Часть 1
Проектирование модели
SECON’14
Технологические рельсы:
 сочетают описание модели в понятных заказчику
терминах со сложными техническими решениями
 помогают соблюдать ограничения, накладываемые
фреймворками, платформами и библиотеками
на организацию программного кода, поддерживают
их совместную работу и однородность решений в рамках
проекта
Все это обеспечивает эффективную разработку
и является залогом долгого и успешного развития
ИТ-системы, уже находящейся в эксплуатации
Что достигнуто?
79/38
SECON’14
 В небольших проектах аналитик и архитектор –
один человек
 В крупных проектах аналитик создает модель, а
архитектор проектирует техническую реализацию
 В классическом процессе каждый из них работает
со своей моделью
 В DDD – совместная работа над одной моделью
 Конфликты – ответственность плохо разграничена
Аналитик и архитектор
80/38
SECON’14
 Аналитик – создает модель и согласует ее
 Архитектор – отвечает за технологические рельсы,
которые обеспечивают эффективную реализацию
 Конструкции единого языка – способ синхронизации
модели с технологическими рельсами
 Разграничение ответственности
 Эффективность проектных решений
обеспечивается технологическими рельсами
 Параллельная работа над проектом
Разработка «с рельсами»
81/38
SECON’14
Единый язык + Единая модель:
 обеспечивают надежную основу для общения всех
участников проекта при принятии решений;
 успешно заменяют мелкую россыпь требований;
 позволяют эффективно развивать сложную систему.
Это требует дополнительных усилий:
 формирование единого языка;
 понимание разработчиками предметной области.
По опыту, результат окупает усилия.
Что же обеспечивает DDD?
82/56
Спасибо! Вопросы?
Максим Цепков http://www.facebook.com/mtsepkov

More Related Content

What's hot

Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
Dima Dzuba
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
Maxim Tsepkov
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требований
SQALab
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
Andrey Bibichev
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
Dima Dzuba
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
Alex V. Petrov
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
CUSTIS
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решения
SPbCoA
 
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
CUSTIS
 
Domain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требованияDomain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требования
CUSTIS
 
Модель системы — архитектура для Agile-разработки
Модель системы — архитектура для Agile-разработкиМодель системы — архитектура для Agile-разработки
Модель системы — архитектура для Agile-разработки
CUSTIS
 
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
Alex V. Petrov
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12
Dima Dzuba
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений
KewpaN
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...Alex V. Petrov
 
Опыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиОпыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурами
ПрофсоUX
 
Коммуникация при различной структуре мышления - таксономия против фолксономии
Коммуникация при различной структуре мышления - таксономия против фолксономииКоммуникация при различной структуре мышления - таксономия против фолксономии
Коммуникация при различной структуре мышления - таксономия против фолксономии
SQALab
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
Alex V. Petrov
 
Внедрение CASE-технологий
Внедрение CASE-технологийВнедрение CASE-технологий
Внедрение CASE-технологийОтшельник
 

What's hot (20)

Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требований
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решения
 
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
Практика применения Enterprise Architect и T4-шаблонов для разработки систем...
 
Domain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требованияDomain Driven Design: модель вместо требования
Domain Driven Design: модель вместо требования
 
Модель системы — архитектура для Agile-разработки
Модель системы — архитектура для Agile-разработкиМодель системы — архитектура для Agile-разработки
Модель системы — архитектура для Agile-разработки
 
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений
 
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
STRATOPLAN. Efficient Object-Oriented Design and Structured Quality of Softwa...
 
Опыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиОпыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурами
 
Коммуникация при различной структуре мышления - таксономия против фолксономии
Коммуникация при различной структуре мышления - таксономия против фолксономииКоммуникация при различной структуре мышления - таксономия против фолксономии
Коммуникация при различной структуре мышления - таксономия против фолксономии
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
HTP. Business Requirements Elicitation & Documentation [1.01, RUS]
 
Внедрение CASE-технологий
Внедрение CASE-технологийВнедрение CASE-технологий
Внедрение CASE-технологий
 

Similar to SECON'2014 - Максим Цепков - DDD: от требований до кода

Ddd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkovDdd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkov
Maxim Tsepkov
 
Ddd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkovDdd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkov
Maxim Tsepkov
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
CUSTIS
 
Practice of enterprice development ProfsoUX-2017
Practice of enterprice development  ProfsoUX-2017Practice of enterprice development  ProfsoUX-2017
Practice of enterprice development ProfsoUX-2017
Maxim Tsepkov
 
Roles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkovRoles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkov
Maxim Tsepkov
 
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахКак совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Danil Dintsis, Ph. D., PgMP
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
SQALab
 
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
Maxim Tsepkov
 
Competency Model (HR API conference, Russian language)
Competency Model (HR API conference, Russian language) Competency Model (HR API conference, Russian language)
Competency Model (HR API conference, Russian language)
Irina Leshchuk
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
SQALab
 
Как выжить глобальной корпорации?
Как выжить глобальной корпорации?Как выжить глобальной корпорации?
Как выжить глобальной корпорации?
CEE-SEC(R)
 
Решения КРОК для управления бизнес-процессами
Решения КРОК для управления бизнес-процессамиРешения КРОК для управления бизнес-процессами
Решения КРОК для управления бизнес-процессами
КРОК
 
DIRECTUM: возможности системы электронного документооборота
DIRECTUM: возможности системы электронного документооборотаDIRECTUM: возможности системы электронного документооборота
DIRECTUM: возможности системы электронного документооборота
DIRECTUM
 
определение и реализация требований к ИТ продукту
определение и реализация требований к ИТ продуктуопределение и реализация требований к ИТ продукту
определение и реализация требований к ИТ продукту
Danil Dintsis, Ph. D., PgMP
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийAlexander Kalouguine
 
САПР и ГИС
САПР и ГИССАПР и ГИС
САПР и ГИС
Softline
 
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровожденияБ.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
Anatoly Levenchuk
 
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
Dakiry
 
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
ScrumTrek
 

Similar to SECON'2014 - Максим Цепков - DDD: от требований до кода (20)

Ddd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkovDdd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkov
 
Ddd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkovDdd softwarepeople-2012-tsepkov
Ddd softwarepeople-2012-tsepkov
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
 
Practice of enterprice development ProfsoUX-2017
Practice of enterprice development  ProfsoUX-2017Practice of enterprice development  ProfsoUX-2017
Practice of enterprice development ProfsoUX-2017
 
Roles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkovRoles happy dev-2013-tsepkov
Roles happy dev-2013-tsepkov
 
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахКак совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
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
 
Competency Model (HR API conference, Russian language)
Competency Model (HR API conference, Russian language) Competency Model (HR API conference, Russian language)
Competency Model (HR API conference, Russian language)
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
 
Как выжить глобальной корпорации?
Как выжить глобальной корпорации?Как выжить глобальной корпорации?
Как выжить глобальной корпорации?
 
Решения КРОК для управления бизнес-процессами
Решения КРОК для управления бизнес-процессамиРешения КРОК для управления бизнес-процессами
Решения КРОК для управления бизнес-процессами
 
DIRECTUM: возможности системы электронного документооборота
DIRECTUM: возможности системы электронного документооборотаDIRECTUM: возможности системы электронного документооборота
DIRECTUM: возможности системы электронного документооборота
 
определение и реализация требований к ИТ продукту
определение и реализация требований к ИТ продуктуопределение и реализация требований к ИТ продукту
определение и реализация требований к ИТ продукту
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требований
 
САПР и ГИС
САПР и ГИССАПР и ГИС
САПР и ГИС
 
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровожденияБ.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
Б.Позин, Е.Горбунова -- развитие ядра Essence для стадии сопровождения
 
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
Аліна Петренко: “Майстер-клас: Виявлення ключових вимог на предпроектній фазі...
 
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
Максим Цепков, Agile - то что на самом деле нужно гос.заказчикам!
 

More from Конференция разработчиков программного обеспечения SECON'2014

SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunnySECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культурыSECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратораSECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения AgileSECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложенийSECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложений
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформSECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данныхSECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
Конференция разработчиков программного обеспечения SECON'2014
 
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
Конференция разработчиков программного обеспечения SECON'2014
 

More from Конференция разработчиков программного обеспечения SECON'2014 (16)

SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunnySECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
SECON'2014 - Сергеев Антон - Асинхронные задачи в iFunny
 
SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация) SECON.Посиделки #16: Cassandra (презентация)
SECON.Посиделки #16: Cassandra (презентация)
 
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
SECON'2014 - Тимур Салюков - История одного кейса Gorussia2014.ru. Как добить...
 
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культурыSECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
SECON'2014 - Кирилл Мокевнин - Формирование инженерной культуры
 
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратораSECON'2014 - Юрий Бушмелев - Эволюция системного администратора
SECON'2014 - Юрий Бушмелев - Эволюция системного администратора
 
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения AgileSECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
SECON'2014 - Алексей Кошкидько - Межконтинентальный опыт внедрения Agile
 
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
SECON'2014 - Филипп Торчинский - Трансформация баг-трекера под любой проект: ...
 
SECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложенийSECON'2014 - Сергей Цивин - Производительность веб-приложений
SECON'2014 - Сергей Цивин - Производительность веб-приложений
 
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформSECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ
 
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиямSECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
SECON'2014 - Антон Веретенников, Илья Семаков - Переход от коллбеков к событиям
 
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...SECON'2014 - Сергей Шпадырев -  Разработка 3D-игры на Flash: едем с костылями...
SECON'2014 - Сергей Шпадырев - Разработка 3D-игры на Flash: едем с костылями...
 
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данныхSECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
SECON'2014 - Андрей Устюжанин - Маленькие секреты больших данных
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
 
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
SECON'2014 - Александр Чистяков - Сравнение современных средств управления ко...
 
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
 
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
SECON'2014 - Команда CTRL-PNZ - Уязвимости для самых маленьких. Что это, как ...
 

SECON'2014 - Максим Цепков - DDD: от требований до кода

  • 1. Domain Driven Design от требований до кода Максим Цепков www.facebook.com/mtsepkov SECON’14
  • 2. SECON’14  Перенос подходов разработки на анализ расширить?  Подумать про тестирование и внедрение Идеи доработки 2/56
  • 3. SECON’14  Есть разные способы ведения разработки  Выбор конкретного – зависит от проекта  В сложных проектах уместна работа с моделями  И DDD – наиболее эффективный способ для этого О чем этот доклад? DDD – ключ к построению сложных систем и их развитию вслед за потребностями бизнеса 3/56
  • 4. SECON’14  Требования  Проектирование  Реализация  Внедрение  Развитие системы DDD – на полном жизненном цикле 4/56 http://en.wikipedia.org/wiki/V-Model_(software_development) Не только модель но и эффективные коммуникации
  • 5. SECON’14 Схема доклада 5/56 Часть 1 Проектирование модели Detailed Design Implementation Integration and Test MaintenanceConcept Requirements and Architecture System Verification Заключение – профит Часть 2 От Модели до Кода
  • 7. SECON’14 Теория DDD – единый язык проекта и одна модель системы • Модели были давно, но две: бизнес-область и система • Единый язык проекта создает общее поле понятий • И позволяет работать с одной, общей моделью Практика • Единый язык и построение Модели в конкретных примерах • Практики проектирования – на этап бизнес-анализа Проектирование в DDD 7/56
  • 8. SECON’14 DDD – как оно начиналось  Концептуальная книга Эрика Эванса • на английском – в 2003 г. • на русском – только в 2010 г. Практическая книга Джимми Нильссона • на английском – в 2006 г. • на русском – в 2007 г. (почти сразу!) 8/56
  • 11. SECON’14  Построен на основе терминов предметной области  Его понимают ИТ-специалисты и эксперты бизнеса  На нем описана модель ИТ-системы и ее место в бизнес-процессах Единый язык (ubiquitous language) Понятия единого языка: Клиент, Накладная, платеж, Долг – из предметной области 11/56
  • 12. SECON’14 Модель системы не соответствует представлению бизнеса о ее месте в модели предприятия. Зачем нужен единый язык? Модель предприятия Представление о месте ИТ-системы Модель ИТ-системы «Не то чтобы совсем не попал, но только не попал в шарик…» 12/56
  • 13. SECON’14 Единый язык позволяет совместить модель системы с представлениями бизнеса о ее месте Итерационное развитие модели ИТ-система Модель ИТ-системы Место ИТ в бизнес-процессе Управляющее воздействие на модель Итерация 13/56
  • 14. SECON’14  Аналитик собирает требования и строит модель – сначала предметной области, затем – системы  Артефакты модели описывают и систему и ее использование в бизнес-процессах предприятия  Разработчик реализует модель  Артефакты модели можно проследить в коде Единая модель Модель предметной области становится моделью системы 14/56
  • 15. SECON’14  Верификация постановок бизнес-специалистами  Общее понимание требований на стороне бизнеса  Обсуждение модели бизнесом и IT, поиск баланса в сложных решениях  Перенос моделей из других предметных областей  Бизнес представляет потенциальные возможности системы и сложность различных доработок  На этапе эксплуатации – эффективное общение бизнес-пользователей и IT без квалифицированных переводчиков-аналитиков Что мы достигаем? 15/56
  • 17. SECON’14 Парадигма моделирования определяет  Элементы языка  Способ их соединения в сложные конструкции  Визуальный образ для представления  Способ отражения модели в код ООП – парадигма моделирования Объекты с атрибутами и методами Диаграмма классов и другие UML-диаграммы Типы, соответствующие бизнес-объектам 17/56
  • 18. SECON’14 Классы соответствуют бизнес-объектам – заказчик видит знакомые названия Модель должен понимать заказчик 18/56 Используем цветовые выделения
  • 19. SECON’14  Не нужно • Стараться изобразить все классы на одной диаграмме • Отображать вспомогательные атрибуты • Использовать технические коды • Использовать сложную нотацию  Диаграммы должны понимать заказчики, а не только разработчики Не нужно усложнять диаграмму 19/56
  • 21. SECON’14 В процессе обработки документа (сделки, договора, контракта) обеспечить проверку и одобрение определенными сотрудниками или отделами Задача Задача касается конкретного документа 21/56
  • 22. SECON’14 Выбор проектного решения Существует несколько типовых шаблонов Каждая виза – со своим жизненным циклом 22/56
  • 23. SECON’14  Шаблоны обладают разной гибкостью и сложностью  Для выбора нужно понимать требуемый баланс между гибкостью и сложностью решения Традиционный подход  На этапе сбора требований аналитики формулируют задачу для конкретного документа  Исходя из этого в системе проектируется решение  Выбранное решение отражает текущую ситуацию В чем проблема? Решение надо принимать с учетом потенциального изменения бизнес-процессов 23/56
  • 24. SECON’14  Проверка сделки казначейством и отделом рисков – не получается выполнять параллельно  Юристы отозвали одобрение кредита, а служба безопасности на него опиралась – связи между визами не контролируются системой  Настройку виз для одобрения договоров с недвижимостью передали в IT из-за сложности Примеры 24/56
  • 25. SECON’14  Представляем шаблоны, описанные применительно к конкретному документу, показываем разницу  Бизнес-специалисты оценивают потенциальную потребность в реализации бизнес-процессов  Решение принимается с учетом перспективы Решение в рамках DDD 25/56
  • 26. SECON’14  Для решения модель надо описать понятно бизнесу • Можно описать обобщенные решения для документов, «состояния» и «визы», и на них ссылаться • Можно описывать каждый случай отдельно  Термины должны быть понятны Заказчику: Например, «визированием» могут считать одобрение документа, требующее только просмотра, а если требуется дополнительная работа, то это называется «обработкой» или «проверкой»  Общий шаблон надо «перевести» на язык проекта В чем Единый язык? 26/56
  • 27. SECON’14  Мы используем известные шаблоны решений  Заказчик оценивает вариант решения не только с точки зрения текущих потребностей, но и из предположений о развитии бизнес-процессов  Проектируя изменения бизнес-процессов, заказчик представляет потенциал гибкости системы и принимает решения с учетом этого Результат 27/56
  • 29. SECON’14  Документ обрабатывается в несколько этапов.  На каждом этапе определенные сотрудники могут совершать определенные действия.  Для передачи на следующий этап должны выполняться определенные условия. Обобщенный документооборот 29/56
  • 30. SECON’14  Документу приписываем состояние.  Состояние определяет этап документооборота: • какие действия можно совершать над документом; • кто отвечает за обработку документа; • кто имеет права на совершение тех или иных действий.  Возможные изменения состояний документа образуют граф переходов. Модель для документооборота Вместо множества атрибутов используем один, определяющий фазу жизненного цикла 30/56
  • 31. SECON’14  Документ – объект предметной области.  Действие над ним – вызов его метода.  Среди всех методов выделяем переходы и связываем их с состояниями.  Граф состояний – State machine diagram. Язык модели UML Язык ООП «с расширениями». Названия состояний и переходов – на языке бизнеса. 31/56
  • 33. SECON’14 Практики проектирования – на этап бизнес-анализа 33/56
  • 34. SECON’14  Стратегии  Политики  Выделение общих объектов  Абстракция через интерфейсы Частные практики Технические практики наполняются бизнес- смыслом и служат для общения с Заказчиком 34/56
  • 35. SECON’14 Перенос практик декомпозиции на бизнес-анализ  Понятие ограниченных контекстов  Различные варианты выделение общего • Общее ядро • Абстрактное ядро • Подключаемые компоненты • Крупноблочная структура • Уровни разделения обязанностей  Изоляция и карта контекстов Контексты 35/56
  • 36. SECON’14 Часть 2. От модели до Кода 36/56 Часть 2 От Модели до Кода Detailed Design Implementation Integration and Test MaintenanceConcept Requirements and Architecture System Verification Заключение – профит Часть 1 Проектирование модели
  • 37. SECON’14  Язык, реализующий парадигму  Framework, часто с диаграммами, например, MS Workflow Foundation для реализации документооборота  DSL, лучше графический, с компилятором или интерпретатором  Диаграммы и понятия единого языка и шаблоны их отражения в реализацию Как отражать модель в реализацию 37/56 Если нет готового – приходится разрабатывать
  • 38. SECON’14  На основе требований создаем объектную модель • структура классов • поведение объектов • интерфейсы  Согласуем ее с заказчиком  Реализуем в коде на основе шаблонов Domain model и Rich objects Что получается? Простое применение DDD 38/38
  • 39. SECON’14  Соответствует парадигме современных языков  Понятна разработчикам и аналитикам  Имеет эффективные визуальное представление  Соответствует реальному миру и понимается заказчиком – если проектировать бизнес-объекты Достоинства объектной модели 39/56
  • 40. SECON’14  ООП – общепринятый и (на простом уровне) интуитивно понятный метод  Модель, сделанная в объектной парадигме, может быть представлена заказчику и согласована с ним  Современные языки поддерживают ООП, модель хорошо реализуется с использованием шаблонов Domain model и Rich objects Достоинства DDD с ООП Этот способ работает, но ограниченно. Простого ООП не хватает, а изучать сложный заказчики не считают правильным 40/38
  • 42. SECON’14  Документу приписываем состояние  Состояние определяет этап документооборота: • какие действия можно совершать над документом • кто отвечает за обработку документ • кто имеет права на совершение тех или иных действий  Возможные изменения состояний документа образуют граф переходов Напомним решение 42/56 Шаблон State Entity
  • 43. SECON’14 Из книги Нильссона Варианты шаблона реализации 43/56
  • 44. SECON’14 Из книги Нильссона 1. Императивно в коде конкретных методов Варианты шаблона реализации 44/56
  • 45. SECON’14 Из книги Нильссона 1. Императивно в коде конкретных методов 2. Императивно в едином методе смены состояния Варианты шаблона реализации 45/56
  • 46. SECON’14 Из книги Нильссона 1. Императивно в коде конкретных методов 2. Императивно в едином методе смены состояния 3. Декларативно – через таблицу переходов и состояний Варианты шаблона реализации 46/56
  • 47. SECON’14 Из книги Нильссона 1. Императивно в коде конкретных методов 2. Императивно в едином методе смены состояния 3. Декларативно – через таблицу переходов и состояний 4. Через иерархию классов-состояний Варианты шаблона реализации 47/56
  • 48. SECON’14 Модель должна прозрачно отражаться в реализацию  Используем декларативное описание (3)  Или комбинацию (1) и (3): • императивно изменяем состояние в методе перехода • контролируем, что изменение соответствует декларативной разметке  Таблица метаданных – декларативное описание – однозначно соответствует диаграмме состояний Что выбрать? 48/56
  • 49. SECON’14  Иерархия классов-состояний – в объектной модели • Полнее выразить реализацию в диаграмме классов • Но поведение документа – за рамками, оно только в графе переходов • Поэтому для единого языка, понимаемого заказчиком – не подходит Почему не иерархия состояний? 49/56
  • 50. SECON’14  Иерархия классов-состояний – в объектной модели • Полнее выразить реализацию в диаграмме классов • Но поведение документа – за рамками, оно только в графе переходов • Поэтому для единого языка, понимаемого заказчиком – не подходит  Реализация через метаданные • Таблица переходов отражает поведение документа в коде • И однозначно соответствует диаграмме переходов • Диаграмма переходов понимается заказчиком – единый язык • При этом иерархия состояний становится излишней • Однако, реализация требует выхода из объектной модели Почему не иерархия состояний? 50/56
  • 52. SECON’14  Отдельный проект • Инициализация таблицы переходов для каждого документа • Общая функция проверки перехода для всех методов (вместе с логом) • Таблица допустимых действий для каждого состояния (тоже с логом)  Собственный объектный framework в Oracle • Таблица переходов и прав в метаданных • Вызов процедур-методов динамически с проверками Реализация на разных платформах 52/56
  • 53. SECON’14 Собственный фреймворк на C#  Разметка методов метаданными – состояния, права  Описание в метаданных графа состояний и условий  Обработка на посткомпиляции при создании реализации Реализация на разных платформах 53/56 [Method(AutoSave = true)] [StateRestriction(RequestForShipmentState.New)] [StateTransition(RequestForShipmentState.New, RequestForShipmentState.Created)] [GrantInvocation(RmsRole.Manager)] public virtual void PrepareForShipment() { State = RequestForShipmentState.Created; ...
  • 55. SECON’14  Технические подробности и сложные формальные методы становятся недопустимы  А без них модель не может служить проектом для реализации, нужно дополнительное проектирование Проблемы при использовании одной модели Потому две модели и использовали Единственная модель на едином языке – и преимущество DDD, и источник проблем  Необходимость понимания модели заказчиком существенно ограничивает моделирование 55/38
  • 56. SECON’14  Бизнес-объект включает все аспекты деятельности • Клиент – как субъект делового мира, партнер по сделкам, взаимоотношения юридические и управленческие • Заказ – полный жизненный цикл от начальных переговоров до исполнения, включая юридическое и другое оформление  Бизнес-объекты тесно связаны между собой  При отражении в IT-объекты получается очень похоже на антипаттерн Big Object  Сложно понимать, развивать, тестировать Большие и сложные объекты 56/38
  • 57. SECON’14  Принципы ООП побуждают к декомпозиции, что увеличивает число объектов  Применение шаблонов (стратегии и др.)  Технические и инфраструктурные атрибуты и классы  Ограничения на объекты со стороны фреймворков и обходные пути для их преодоления  Сложная модель не понимается заказчиком, простая – не отражает реализацию Техническое усложнение модели 57/38
  • 58. SECON’14  Подход разрабатывался для слоя бизнес-логики  Использование объектных языков побуждает ограничиться объектными моделями Хочется  Использовать модель при проектировании интерфейсов  Расширять способы моделирования Ограниченная область DDD-модели 58/38
  • 59. SECON’14 Решение – технологические рельсы 59/56 Отделяем технологические аспекты от модели
  • 60. SECON’14 Технологические рельсы – это способ перевода модели на едином языке в код  Платформы, фреймворки и библиотеки  Способы их организации в единое приложение  Способы отражения модели приложения в код  Типовые задачи и design patterns для их реализации Формулируются на всех уровнях – от архитектуры до частных задач посылки сообщения Что такое технологические рельсы «Применяем Domain model и Rich Objects» – частный случай технологических рельсов 60/38
  • 61. SECON’14 Модель на едином языке Код Термины единого языка Технологические рельсы (шаблоны реализации) По рельсам  61/38
  • 63. SECON’14  Архитектурные  Инфраструктурные  Рельсы предметной области Виды технологических рельсов 63/38
  • 64. SECON’14 Структура приложения в крупном, например:  Java с Hibernate и Spring  Создаем anemic-объекты с разметкой Hibernate для каждого бизнес-класса, используем их так же, как DTO для интерфейса  Бизнес-логику каждого класса реализуем в отдельном статическом классе  Документооборот описываем через состояния объекта, для реализации используем StateEntity с декларативной таблицей состояний…  … Архитектурные рельсы Это способ реализации модели в крупном 64/38
  • 65. SECON’14 Способы реализации стандартных задач: печатных форм, отправки сообщений, интеграции, например:  Все печатные формы реализуются с помощью библиотеки X  Доступ к библиотеке – через сервис-локатор  Для бизнес-объекта с печатной формой создаем класс PrintForm<TClass>, в котором каждой форме соответствует отдельный метод…  На интерфейсе команды печати появляются автоматически, исходя из созданных классов… Инфраструктурные рельсы 65/38
  • 66. SECON’14 Способ реализации конструкций, характерных для предметной области проекта, например документа с товарными строками:  Строки документов хранятся в отдельных таблицах, однако в объектной модели доступ к ним – исключительно через шапки документов  Для реализации типовой работы класс документа наследуем от WareDoc<TDocHeader, TDocItem>, что обеспечивает стандартный функционал…  Если документ не хранит цены и стоимость, а берет их из справочников, реализуем стратегию PriceCalc  … Рельсы предметной области 66/38
  • 68. SECON’14 Задача: Для накладной надо печатать форму ТОРГ-12 Задача – типовая, решение – единообразное Требования к решению:  Отделить печать от бизнес-логики  Обеспечить независимое тестирование  Желательно обобщенное решение Рельсы для печатной формы Декомпозиция кода и независимое тестирование – признаки хорошего стиля 68/38
  • 69. SECON’14 Обобщенный сервис ПечатьТорг12 и метод НапечататьТорг12 у класса Накладная  Простое и очевидное решение  Увеличивается класс Накладная, в нем смешивается разнородная бизнес-логика  Класс Накладная зависит от сервиса печати, это сильно затрудняет тестирование Печать форм: решение 1 ПечатьТорг12 … ПечатьТорг12поНакладной() … Накладная 69/38
  • 70. SECON’14 Обобщенный сервис ПечатьТорг12 и сервис ПечатьТорг12поНакладной  Логика печати вынесена из бизнес-объектов  Для тестирования ПечатьТорг12поНакладной необходима Накладная со всей инфраструктурой  Таких классов печати становится довольно много Печать форм: решение 2 ПечатьТорг12 ПечатьТорг12поНакладной Накладная 70/38
  • 71. SECON’14 Обобщенный сервис ПечатьФормы и сервис ПечатьТорг12поНакладной  Логика печати вынесена из бизнес-объектов  Печать и бизнес-логика тестируются независимо Печать форм: решение 3 ПечатьФормыДанныеДляПечати ПечатьТорг12Накладная Решение применяем ко всем задачам печати, тогда в модели достаточно перечислить формы 71/38
  • 73. SECON’14 По опыту разработки корпоративных приложений  Плохо представляет цикл жизни объекта  Плохо подходит для отражения потоков ресурсов  Плохо подходит для систем связанных показателей Если для области автоматизации эти аспекты важны, можно применять другие парадигмы Недостатки объектной модели 73/56
  • 74. SECON’14  У класса-документа есть атрибут состояние, описывающий текущее место в документообороте  В модели для документов создаем диаграмму состояний, на ней же показываем роли  В классе для каждого перехода реализуем метод, помечая его метаданными  В начале и в конце метода перехода вызываем PreTransit и PostTransit, которые обеспечивают логирование и контролируют состояние документа Диаграммы состояний 74/38
  • 75. SECON’14  Реализуем конструктор обобщенных интерфейсов на основе метаданных бизнес-объектов – таблиц с фильтрами для просмотра, диалогов для изменения  Обеспечиваем точки расширения для реализации дополнительной логики  В постановках на 90% интерфейсов – списки полей  Реализация требуется только для особых случаев Модель для интерфейсов 75/38
  • 76. SECON’14  Выбрать или придумать парадигму моделирования • Объекты обмениваются сообщениями • Ресурс выделяется действующим лицам  Определить визуальный образ единого языка • Диаграммы взаимодействия и синхронизации • Образ разрезания пиццы  Разработать правила отражения модели в код – иначе элементы модели не найти в реализации  Лучше, если отражение будет по шаблонам Как сделать необъектную модель? 76/56
  • 77. SECON’14  Присутствуют в большинстве enterprise-приложений  Плохо описываются в терминах объектов Решение  Специальные диаграммы учета  Базовое учетное ядро – обобщенный учет  Шаблон реализации диаграмм учета на учетном ядре  Учет описывается в адекватных терминах  Диаграммы обеспечивают эффективное понимание Подробнее о диаграммах состояний и реализации учета – в докладе на ADD-2011 «Необъектные модели предметной области» Задачи ведения учета 77/38
  • 78. SECON’14 Заключение – профит 78/56 Detailed Design Implementation Integration and Test MaintenanceConcept Requirements and Architecture System Verification Заключение – профит Часть 2 От Модели до Кода Часть 1 Проектирование модели
  • 79. SECON’14 Технологические рельсы:  сочетают описание модели в понятных заказчику терминах со сложными техническими решениями  помогают соблюдать ограничения, накладываемые фреймворками, платформами и библиотеками на организацию программного кода, поддерживают их совместную работу и однородность решений в рамках проекта Все это обеспечивает эффективную разработку и является залогом долгого и успешного развития ИТ-системы, уже находящейся в эксплуатации Что достигнуто? 79/38
  • 80. SECON’14  В небольших проектах аналитик и архитектор – один человек  В крупных проектах аналитик создает модель, а архитектор проектирует техническую реализацию  В классическом процессе каждый из них работает со своей моделью  В DDD – совместная работа над одной моделью  Конфликты – ответственность плохо разграничена Аналитик и архитектор 80/38
  • 81. SECON’14  Аналитик – создает модель и согласует ее  Архитектор – отвечает за технологические рельсы, которые обеспечивают эффективную реализацию  Конструкции единого языка – способ синхронизации модели с технологическими рельсами  Разграничение ответственности  Эффективность проектных решений обеспечивается технологическими рельсами  Параллельная работа над проектом Разработка «с рельсами» 81/38
  • 82. SECON’14 Единый язык + Единая модель:  обеспечивают надежную основу для общения всех участников проекта при принятии решений;  успешно заменяют мелкую россыпь требований;  позволяют эффективно развивать сложную систему. Это требует дополнительных усилий:  формирование единого языка;  понимание разработчиками предметной области. По опыту, результат окупает усилия. Что же обеспечивает DDD? 82/56 Спасибо! Вопросы? Максим Цепков http://www.facebook.com/mtsepkov