Download - Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?
Николай ГребневCUSTIS
ЧТО ТАКОЕ DDD?
2
DDD – Domain Driven Design
3
4
Организация бизнес-логики
• Сценарий транзакции• Модуль таблицы• Модель предметной области
5
Сценарий транзакции
6
Бизнес-операция Изменения
Вход
Результат
Модуль таблицы
7
RecordsetDataSet
Модель предметной области
9
Модель предметной области
Каждая сущность модели:• Имеет идентичность• Инкапсулирует:• Состояние• Поведение
10
Что?
• Переработка знаний• Единый язык• Проектирование по модели (Model Driven
Design)
12
Дизайн Модель
13
14
Переработка знаний
Проектирование модели
Углубляющий рефакторинг
15
ПЕРЕРАБОТКА ЗНАНИЙ
Переработка знаний
– поиск системы абстрактных понятий, учитывающей все необходимые подробности
17
Выполняют
• Специалисты в предметной области• Разработчики
18
Руководят процессом
Разработчики
19
ПРИМЕР
20
Задача
Рассчитать зарплату сотрудника в заданном месяце
21
―С. в П. О.: Отношение количества отработанных дней к количеству рабочих дней в месяце умноженное на отношение оклада сотрудника к количеству рабочих дней в месяце
22
Модель
23
Сотрудник
+Оклад
Месяц
+Количество рабочих дней
―Р.: Что такое отработанный день?―С. в П. О.: Рабочий день, когда сотрудник
присутствовал на рабочем месте при этом он еще не уволился
24
Модель
25
Сотрудник
+ОкладМесяц
+Количество рабочих дней
День
+Рабочий/Выходной+Присутствовал
*
1
*
1
―С. в П. О.: Но сотрудник может взять отпуск, или быть на больничном, при этом такие дни рассчитываются по особой ставке
26
Модель
27
Сотрудник
+Оклад
Месяц
+Количество рабочих дней
День
+Рабочий/Выходной+Присутствовал
*
1*
1
Отпуск
+За свой счет/Оплачиваемый
Больничный
―Р.: А откуда можно узнать работал ли в этот день сотрудник или был в отпуске?
―С. в П. О.: Из табеля учета рабочего времени
28
29
МодельСотрудник
+Оклад
Месяц
+Количество рабочих дней
День
+Рабочий/Выходной+Присутствовал
*1
* 1
Табель УРВ
+Получить количество отработанных дней(месяц)+Получить количество дней в отпуске(месяц)+Получить количество дней на больничном(месяц)
ЕДИНЫЙ ЯЗЫК
30
Единый язык
• Между всеми участниками проекта• На основе модели предметной области• Проверяет модель предметной области• Используется во всех документах• Используется в коде
31
Модель предметной
областиТерминология
32
Терминология
— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением
33
Терминология
— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением
34
Общение между людьми
35
Терминология
— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением
36
Использование в коде
ПРОЕКТИРОВАНИЕ ПО МОДЕЛИ
Проектирование по моделиModel Driven Development
– проектирование архитектуры, при котором соблюдается максимально точное соответствие между некоторым подмножеством элементов программы и элементами модели
39
Модель предметной области
40
Модель программы
41
42
Модель программы
• DataSet• DataReader • Command• DataAdapter• Connection• И т. д.
Модель предметной области
• Книга• Автор• Издатель• Читатель• И т. д.
Модель предметной области
43
Model Driven Development
MDD – прямая проекция языка предметной области на объектно ориентированный язык программирования
44
Model Driven Development
MDD – прямая проекция языка предметной области на объектно ориентированный язык программирования
45
Задача
Зачислить сотрудника в подразделение начиная с заданной даты
46
47
Модель
Сотрудник Подразделение
+Зачислить(сотрудника, на дату)
Что есть
DepartmentHistoryRepository.Remove( from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart >= date select dh);
48
Что есть
var dhe = from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart <= date && dh.DateEnd >= date select dh;dhe.DateEnd = date.AddDay(-1)
Что есть
DepartmentHistoryRepository.CreateNew( employee, date);
Что должно быть
подразделение.Зачислить( сотрудник, дата);
51
ЗАЧЕМ DDD?
52
Зачем DDD?
Эффективный способ борьбы со сложностьюЕдиный язык
Низкая стоимость разработки и сопровождения
53
Почему нет?
Проблемы:• Организационные:• Разделение анализа и проектирования• Отстранение разработчиков от анализа• Отсутствие опыта DDD
• Технические
54