Domain Driven Design в условиях разработки распределенных...

73
Domain Driven Design в условиях разработки распределенных приложений Николай Гребнев 1

description

Распределенная архитектура приложения сейчас является наиболее актуальным выбором при проектировании корпоративных информационных систем. Такие архитектурные шаблоны как сервисно-ориентированная архитектура (SOA) и трехзвенная архитектура (3-tier architecture) являются de-facto стандартами в разработке корпоративных приложений. Зачастую, главной проблемой в разработки является борьба со сложностью решаемой задачи, при этом для приложений уровня предприятия сложность с каждым годом стремительно увеличивается. Одним из наиболее эффективных средств борьбы с растущей сложностью является методология проектирования на основе модели предметной области (Domain Driven Design, DDD). Каждый, кто пытался применить DDD в приложениях, имеющих распределенную архитектуру, будь то сервисы или клиент-сервер, знает с каким количеством трудностей приходится сталкиваться. В докладе будут рассмотрена целесообразность применения DDD в приложениях с сервисно-ориентированной архитектурой и в многозвенных приложениях, будут освещены трудности, возникающие при использовании DDD, и обозначены пути их преодоления. Будут даны ответы на вопросы: - Стоит ли использовать DDD при разработке распределенных приложений? - Как использовать DDD при использовании различных архитектурных стилей? - Какую роль играют библиотеки, инструменты и фреймворки в разработке на основе модели предметной области? - Какова эффективность использования DDD в agile-процессе разработки распределенных приложений?

Transcript of Domain Driven Design в условиях разработки распределенных...

Page 1: Domain Driven Design в условиях разработки распределенных приложений

Domain Driven Design в условиях разработки распределенных приложений

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

1

Page 2: Domain Driven Design в условиях разработки распределенных приложений

2

Содержание• Что такое DDD?• Распределенные приложения• Проблемы DDD в распределенных

приложениях• Как быть?• Принимаем решение• Подводим итоги

Page 3: Domain Driven Design в условиях разработки распределенных приложений

3

ЧТО ТАКОЕ DDD?

Page 4: Domain Driven Design в условиях разработки распределенных приложений

4

DDD – DataDisplayDebugger?

Page 6: Domain Driven Design в условиях разработки распределенных приложений

Domain Driven Design

6

Page 7: Domain Driven Design в условиях разработки распределенных приложений

7

Domain Driven DesignПроектирование по модели – проектирование архитектуры, при котором соблюдается максимально точное соответствие между некоторым подмножеством элементов программы и элементами модели (Эрик Эванс)

Page 8: Domain Driven Design в условиях разработки распределенных приложений

8

Domain Driven Design

Page 9: Domain Driven Design в условиях разработки распределенных приложений

9

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

Page 10: Domain Driven Design в условиях разработки распределенных приложений

10

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

Page 11: Domain Driven Design в условиях разработки распределенных приложений

11

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

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

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

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

Page 12: Domain Driven Design в условиях разработки распределенных приложений

12

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

Page 13: Domain Driven Design в условиях разработки распределенных приложений

13

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

Page 14: Domain Driven Design в условиях разработки распределенных приложений

14

Почему DDD?• Эффективный способ борьбы со

сложностью• Единый язык

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

Page 15: Domain Driven Design в условиях разработки распределенных приложений

15

Почему DDD в Agile?• Расстояние между заказчиком и

разработчиком невелико• Заказчик и разработчик разговаривают на

одном языке• Итеративная разработка – постепенное

изменение модели

Page 16: Domain Driven Design в условиях разработки распределенных приложений

16

ORM (Object-relational mapping)ORM – технология программирования для конвертации данных между несовместимыми типами систем в объектно-ориентированные языки

Page 18: Domain Driven Design в условиях разработки распределенных приложений

ORM ≠ DDD

18

Page 20: Domain Driven Design в условиях разработки распределенных приложений

20

Rich VS Anemic

Page 21: Domain Driven Design в условиях разработки распределенных приложений

21

Rich

+Бизнес-логика()

-Данные

Класс1

+Бизнес-логика()

-Данные

Класс2

+Бизнес-логика()

-Данные

Класс3

*

*

*

*

Page 22: Domain Driven Design в условиях разработки распределенных приложений

22

Anemic

Page 23: Domain Driven Design в условиях разработки распределенных приложений

23

Anemic?

ORM?

Page 24: Domain Driven Design в условиях разработки распределенных приложений

24

Rich!

Page 25: Domain Driven Design в условиях разработки распределенных приложений

25

РАСПРЕДЕЛЕННЫЕ ПРИЛОЖЕНИЯ

Page 26: Domain Driven Design в условиях разработки распределенных приложений

26

Шаблоны распределенных архитектур• Клиент-Сервер• 3-х звенная (многозвенная) архитектура• SOA• Enterprise Service Bus

Page 27: Domain Driven Design в условиях разработки распределенных приложений

27

Клиент-Сервер

Клиент БД

Page 28: Domain Driven Design в условиях разработки распределенных приложений

28

3-х звенная архитектура

Сервер приложений БД Клиент

Page 29: Domain Driven Design в условиях разработки распределенных приложений

29

SOA

Сервис 1

Сервис 2 Сервис 3

Page 30: Domain Driven Design в условиях разработки распределенных приложений

30

Enterprise Service Bus

ESB

Система 1

Система 2 Система 3

Page 31: Domain Driven Design в условиях разработки распределенных приложений

31

Почему распределенная архитектура?

• Безопасность• Эффективность• Совместная работа

Page 32: Domain Driven Design в условиях разработки распределенных приложений

32

DDD В РАСПРЕДЕЛЕННЫХ ПРИЛОЖЕНИЯХ

Page 33: Domain Driven Design в условиях разработки распределенных приложений

33

Клиент

Клиент-Сервер

БД ORM Доменная модель

Page 34: Domain Driven Design в условиях разработки распределенных приложений

Проблемы?

34

Page 35: Domain Driven Design в условиях разработки распределенных приложений

Нет проблем!

35

ORM БД Доменная

модель

Page 36: Domain Driven Design в условиях разработки распределенных приложений

36

3-х звенная архитектура

Сервер приложений

БД ORM Доменная модель сервера

Клиент

Доменная модель клиента

Page 37: Domain Driven Design в условиях разработки распределенных приложений

Проблемы?

37

Page 38: Domain Driven Design в условиях разработки распределенных приложений

38

Проблемы• Как?– Построить взаимодействие с сервером

– Преобразовать данные в доменную модель на клиенте

?Доменная

модель клиента

?

Page 39: Domain Driven Design в условиях разработки распределенных приложений

39

SOAСервис 1

БД ORM Доменная модель 1

Сервис 2

Доменная модель 2

Сервис 3

Доменная модель 3

Page 40: Domain Driven Design в условиях разработки распределенных приложений

Проблемы?

40

Page 41: Domain Driven Design в условиях разработки распределенных приложений

41

Проблемы• Как?– Построить взаимодействие другими сервисами

– Преобразовать данные в локальную доменную модель

?

Доменная модель

?

Page 42: Domain Driven Design в условиях разработки распределенных приложений

42

Проблемы• Как? – Сочетать использование ORM и работу с

другими сервисами?

Доменная модель сервиса

БД ORM

Page 43: Domain Driven Design в условиях разработки распределенных приложений

43

Enterprise Service Bus

Система 2

Доменная модель 2

Система 3

Доменная модель 3

Система 1

БД ORM Доменная модель 1

ESB

Page 44: Domain Driven Design в условиях разработки распределенных приложений

Проблемы?

44

Page 45: Domain Driven Design в условиях разработки распределенных приложений

45

Проблемы• Как?– Построить взаимодействие с шиной

– Преобразовать данные из шины в доменную модель

ESB ?

ESB ?Доменная

модель системы

Page 46: Domain Driven Design в условиях разработки распределенных приложений

46

Проблемы• Как? – Сочетать использование ORM и работу с шиной

Доменная модель сервиса

БД ORM

ESB

Page 47: Domain Driven Design в условиях разработки распределенных приложений

47

Проблемы в DDD в распределенных приложениях

• Взаимодействие с удаленными источниками данных

?

Page 48: Domain Driven Design в условиях разработки распределенных приложений

48

Проблемы в DDD в распределенных приложения

• Преобразование данных из удаленных источников в доменную модель

Данные ?Доменная

модель системы

Page 49: Domain Driven Design в условиях разработки распределенных приложений

Распределенная архитектура вносит в модель объекты

отсутствующие в предметной области

Соединение

Сервис временно недоступен

Данные по запросу

Page 50: Domain Driven Design в условиях разработки распределенных приложений

50

Проблемы в DDD в распределенных приложения

• Сочетание различных источников данных

Доменная модель

Данные

Данные

Page 51: Domain Driven Design в условиях разработки распределенных приложений

51

Развитие DDD

2002 год 2003 год 2008 год

Page 52: Domain Driven Design в условиях разработки распределенных приложений

52

Причины• Отсутствие шаблонов для

удаленного взаимодействия

• Отсутствие готовых инструментальных средств

Page 53: Domain Driven Design в условиях разработки распределенных приложений

53

КАК БЫТЬ?

Page 54: Domain Driven Design в условиях разработки распределенных приложений

Шаблоны удаленного взаимодействия

Page 55: Domain Driven Design в условиях разработки распределенных приложений

55

RPC (Remote Procedure Call)• .NET Remoting• CORBA• WCF• и т. д.

Page 56: Domain Driven Design в условиях разработки распределенных приложений

Почему нет?

56

Page 57: Domain Driven Design в условиях разработки распределенных приложений

57

Почему нет?

• Доменные модели разные

• Стоимость удаленного вызова на порядки

выше стоимости локалького

Page 58: Domain Driven Design в условиях разработки распределенных приложений

Data Transfer Object

Page 59: Domain Driven Design в условиях разработки распределенных приложений

59

DTOДоменная модель 1

Доменная модель 2

Page 60: Domain Driven Design в условиях разработки распределенных приложений

60

DTOДоменная модель

Page 61: Domain Driven Design в условиях разработки распределенных приложений

Инструменты

Page 62: Domain Driven Design в условиях разработки распределенных приложений

62

Что делать?Логика

преобразования данных и удаленного

взаимодействия

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

Page 63: Domain Driven Design в условиях разработки распределенных приложений

63

Что делать?

Разработать инструментарий

Page 64: Domain Driven Design в условиях разработки распределенных приложений

64

ПРИНИМАЕМ РЕШЕНИЕ

Page 65: Domain Driven Design в условиях разработки распределенных приложений

65

Клиент-сервер

• Множество инструментов и платформ

• Готовые архитектурные шаблоны

• DDD – выгодно

Page 66: Domain Driven Design в условиях разработки распределенных приложений

66

3-х звенная архитектура• Тонкий клиент – см. клиент-сервер• Толстый клиент:– Мало логики – не использовать DDD на клиенте– Средне логики – помещать инфраструктурный

код в доменную модель– Много логики – разработать свой слой

преобразования данных

Page 67: Domain Driven Design в условиях разработки распределенных приложений

67

SOA и ESB• Удаленного взаимодействия немного –

поместить логику преобразования данных в доменную модель

• Иначе – разработать свой слой преобразования данных

Page 68: Domain Driven Design в условиях разработки распределенных приложений

68

ПОДВОДИМ ИТОГИ

Page 69: Domain Driven Design в условиях разработки распределенных приложений

Распределенная архитектура – данность

Page 70: Domain Driven Design в условиях разработки распределенных приложений

70

Что нам дает DDD• Эффективный способ борьбы со

сложностью• Единый язык

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

Page 71: Domain Driven Design в условиях разработки распределенных приложений

Но есть проблемы!

Page 72: Domain Driven Design в условиях разработки распределенных приложений

72

Так что же делать?• Оценить:– Сложность доменной модели– Необходимость сильно распределенной

архитектуры– Стоимость разработки собственных

инструментов

Page 73: Domain Driven Design в условиях разработки распределенных приложений

Вопросы?

Докладчик: Николай Гребневe-mail: [email protected]://www.slideshare.net/ngrebnev/domain-driven-design-6988494

73