55
Domain Driven Design - как, почему и зачем? Николай Гребнев CUSTIS

Domain Driven Design - как, почему и зачем?

  • Upload
    ngrebnev

  • View
    10.006

  • Download
    0

Embed Size (px)

DESCRIPTION

Одной из самых серьезных проблем в разработке программного обеспечения является борьба со сложностью решаемой задачи. Более того сложность задач решаемых разработчиками с каждым годом стремительно растет. Для решения этой проблемы хорошо себя зарекомендовал на практике набор подходов и методов, объединенных общим названием Domain Driven Design (DDD). DDD позволяет существенно увеличить скорость разработки, снизить стоимость сопровождения и повысить качестве программного обеспечения. Но, несмотря на это, внедрение DDD на практике сталкивается с множеством трудностей и препятствий, что нередко приводит к полному отказу от применения данного похода в проекте. Доклад посвящен описанию того как Domain Driven Design может быть использован в вашем проекте, зачем это вам нужно и почему это работает. Будут освещены преимущества и недостатки DDD, трудности с которыми приходится сталкиваться при его использовании и какой результат принесет его применение.

Citation preview

Page 1: Domain Driven Design - как, почему и зачем?

Domain Driven Design - как, почему и зачем?

Николай ГребневCUSTIS

Page 2: Domain Driven Design - как, почему и зачем?

ЧТО ТАКОЕ DDD?

2

Page 3: Domain Driven Design - как, почему и зачем?

DDD – Domain Driven Design

3

Page 4: Domain Driven Design - как, почему и зачем?

4

Page 5: Domain Driven Design - как, почему и зачем?

Организация бизнес-логики

• Сценарий транзакции• Модуль таблицы• Модель предметной области

5

Page 6: Domain Driven Design - как, почему и зачем?

Сценарий транзакции

6

Бизнес-операция Изменения

Вход

Результат

Page 7: Domain Driven Design - как, почему и зачем?

Модуль таблицы

7

Page 8: Domain Driven Design - как, почему и зачем?

RecordsetDataSet

Page 9: Domain Driven Design - как, почему и зачем?

Модель предметной области

9

Page 10: Domain Driven Design - как, почему и зачем?

Модель предметной области

Каждая сущность модели:• Имеет идентичность• Инкапсулирует:• Состояние• Поведение

10

Page 12: Domain Driven Design - как, почему и зачем?

Что?

• Переработка знаний• Единый язык• Проектирование по модели (Model Driven

Design)

12

Page 13: Domain Driven Design - как, почему и зачем?

Дизайн Модель

13

Page 14: Domain Driven Design - как, почему и зачем?

14

Page 15: Domain Driven Design - как, почему и зачем?

Переработка знаний

Проектирование модели

Углубляющий рефакторинг

15

Page 16: Domain Driven Design - как, почему и зачем?

ПЕРЕРАБОТКА ЗНАНИЙ

Page 17: Domain Driven Design - как, почему и зачем?

Переработка знаний

– поиск системы абстрактных понятий, учитывающей все необходимые подробности

17

Page 18: Domain Driven Design - как, почему и зачем?

Выполняют

• Специалисты в предметной области• Разработчики

18

Page 19: Domain Driven Design - как, почему и зачем?

Руководят процессом

Разработчики

19

Page 20: Domain Driven Design - как, почему и зачем?

ПРИМЕР

20

Page 21: Domain Driven Design - как, почему и зачем?

Задача

Рассчитать зарплату сотрудника в заданном месяце

21

Page 22: Domain Driven Design - как, почему и зачем?

―С. в П. О.: Отношение количества отработанных дней к количеству рабочих дней в месяце умноженное на отношение оклада сотрудника к количеству рабочих дней в месяце

22

Page 23: Domain Driven Design - как, почему и зачем?

Модель

23

Сотрудник

+Оклад

Месяц

+Количество рабочих дней

Page 24: Domain Driven Design - как, почему и зачем?

―Р.: Что такое отработанный день?―С. в П. О.: Рабочий день, когда сотрудник

присутствовал на рабочем месте при этом он еще не уволился

24

Page 25: Domain Driven Design - как, почему и зачем?

Модель

25

Сотрудник

+ОкладМесяц

+Количество рабочих дней

День

+Рабочий/Выходной+Присутствовал

*

1

*

1

Page 26: Domain Driven Design - как, почему и зачем?

―С. в П. О.: Но сотрудник может взять отпуск, или быть на больничном, при этом такие дни рассчитываются по особой ставке

26

Page 27: Domain Driven Design - как, почему и зачем?

Модель

27

Сотрудник

+Оклад

Месяц

+Количество рабочих дней

День

+Рабочий/Выходной+Присутствовал

*

1*

1

Отпуск

+За свой счет/Оплачиваемый

Больничный

Page 28: Domain Driven Design - как, почему и зачем?

―Р.: А откуда можно узнать работал ли в этот день сотрудник или был в отпуске?

―С. в П. О.: Из табеля учета рабочего времени

28

Page 29: Domain Driven Design - как, почему и зачем?

29

МодельСотрудник

+Оклад

Месяц

+Количество рабочих дней

День

+Рабочий/Выходной+Присутствовал

*1

* 1

Табель УРВ

+Получить количество отработанных дней(месяц)+Получить количество дней в отпуске(месяц)+Получить количество дней на больничном(месяц)

Page 30: Domain Driven Design - как, почему и зачем?

ЕДИНЫЙ ЯЗЫК

30

Page 31: Domain Driven Design - как, почему и зачем?

Единый язык

• Между всеми участниками проекта• На основе модели предметной области• Проверяет модель предметной области• Используется во всех документах• Используется в коде

31

Page 32: Domain Driven Design - как, почему и зачем?

Модель предметной

областиТерминология

32

Page 33: Domain Driven Design - как, почему и зачем?

Терминология

— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением

33

Page 34: Domain Driven Design - как, почему и зачем?

Терминология

— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением

34

Page 35: Domain Driven Design - как, почему и зачем?

Общение между людьми

35

Page 36: Domain Driven Design - как, почему и зачем?

Терминология

— система терминов — слов научно-технического языка, обладающих определенным, четко отграниченным значением

36

Page 37: Domain Driven Design - как, почему и зачем?

Использование в коде

Page 38: Domain Driven Design - как, почему и зачем?

ПРОЕКТИРОВАНИЕ ПО МОДЕЛИ

Page 39: Domain Driven Design - как, почему и зачем?

Проектирование по моделиModel Driven Development

– проектирование архитектуры, при котором соблюдается максимально точное соответствие между некоторым подмножеством элементов программы и элементами модели

39

Page 40: Domain Driven Design - как, почему и зачем?

Модель предметной области

40

Page 41: Domain Driven Design - как, почему и зачем?

Модель программы

41

Page 42: Domain Driven Design - как, почему и зачем?

42

Модель программы

• DataSet• DataReader • Command• DataAdapter• Connection• И т. д.

Модель предметной области

• Книга• Автор• Издатель• Читатель• И т. д.

Page 43: Domain Driven Design - как, почему и зачем?

Модель предметной области

43

Page 44: Domain Driven Design - как, почему и зачем?

Model Driven Development

MDD – прямая проекция языка предметной области на объектно ориентированный язык программирования

44

Page 45: Domain Driven Design - как, почему и зачем?

Model Driven Development

MDD – прямая проекция языка предметной области на объектно ориентированный язык программирования

45

Page 46: Domain Driven Design - как, почему и зачем?

Задача

Зачислить сотрудника в подразделение начиная с заданной даты

46

Page 47: Domain Driven Design - как, почему и зачем?

47

Модель

Сотрудник Подразделение

+Зачислить(сотрудника, на дату)

Page 48: Domain Driven Design - как, почему и зачем?

Что есть

DepartmentHistoryRepository.Remove( from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart >= date select dh);

48

Page 49: Domain Driven Design - как, почему и зачем?

Что есть

var dhe = from dh in DepartmentHistoryRepository where dh.EmployeeId = employee.Id && dh.DateStart <= date && dh.DateEnd >= date select dh;dhe.DateEnd = date.AddDay(-1)

Page 50: Domain Driven Design - как, почему и зачем?

Что есть

DepartmentHistoryRepository.CreateNew( employee, date);

Page 51: Domain Driven Design - как, почему и зачем?

Что должно быть

подразделение.Зачислить( сотрудник, дата);

51

Page 52: Domain Driven Design - как, почему и зачем?

ЗАЧЕМ DDD?

52

Page 53: Domain Driven Design - как, почему и зачем?

Зачем DDD?

Эффективный способ борьбы со сложностьюЕдиный язык

Низкая стоимость разработки и сопровождения

53

Page 54: Domain Driven Design - как, почему и зачем?

Почему нет?

Проблемы:• Организационные:• Разделение анализа и проектирования• Отстранение разработчиков от анализа• Отсутствие опыта DDD

• Технические

54

Page 55: Domain Driven Design - как, почему и зачем?

Спасибо за внимание

Николай ГребневCUSTIS

[email protected]://www.slideshare.net/ngrebnev