SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
DomainDrivenDesign в условиях разработки распределенных приложений ,[object Object],Николай Гребнев,[object Object],1,[object Object]
Содержание,[object Object],Что такое DDD?,[object Object],Распределенные приложения,[object Object],Проблемы DDD в распределенных приложениях,[object Object],Как быть?,[object Object],Принимаем решение,[object Object],Подводим итоги,[object Object],2,[object Object]
Что такое DDD?,[object Object],3,[object Object]
DDD – DataDisplayDebugger?,[object Object],4,[object Object]
DDD – Domain Driven Design!,[object Object],5,[object Object]
Domain Driven Design,[object Object],6,[object Object]
Domain Driven Design,[object Object],Проектирование по модели – проектирование архитектуры, при котором соблюдается максимально точное соответствие между некоторым подмножеством элементов программы и элементами модели (Эрик Эванс),[object Object],7,[object Object]
Domain Driven Design,[object Object],8,[object Object]
Модель программы,[object Object],9,[object Object]
Модель предметной области,[object Object],10,[object Object]
Модель программы,[object Object],Модель предметной области,[object Object],DataSet,[object Object],DataReader,[object Object],Command,[object Object],DataAdapter,[object Object],Connection,[object Object],И т. д.,[object Object],Книга,[object Object],Автор,[object Object],Издатель,[object Object],Читатель,[object Object],И т. д.,[object Object],11,[object Object]
Модель предметной области,[object Object],12,[object Object]
Domain Driven Design,[object Object],DDD – проекция языка предметной области на объектно ориентированный язык программирования,[object Object],13,[object Object]
Почему DDD?,[object Object],Эффективный способ борьбы со сложностью,[object Object],Единый язык,[object Object],Низкая стоимость разработки и сопровождения,[object Object],14,[object Object]
Почему DDD в Agile?,[object Object],Расстояние между заказчиком и разработчиком невелико,[object Object],Заказчик и разработчик разговаривают на одном языке,[object Object],Итеративная разработка – постепенное изменение модели,[object Object],15,[object Object]
ORM (Object-relational mapping),[object Object],ORM – технология программирования для конвертации данных между несовместимыми типами систем в объектно-ориентированные языки,[object Object],16,[object Object]
ORM,[object Object],17,[object Object]
ORM ≠ DDD,[object Object],18,[object Object]
Архитектурные стили при работе  с ORM,[object Object],19,[object Object]
Rich VS Anemic,[object Object],20,[object Object]
Rich,[object Object],21,[object Object]
Anemic,[object Object],22,[object Object]
Anemic?,[object Object],23,[object Object],ORM?,[object Object]
Rich!,[object Object],24,[object Object]
Распределенные приложения,[object Object],25,[object Object]
Шаблоны распределенных архитектур,[object Object],Клиент-Сервер,[object Object],3-хзвенная (многозвенная) архитектура,[object Object],SOA,[object Object],Enterprise Service Bus,[object Object],26,[object Object]
Клиент-Сервер,[object Object],БД,[object Object],Клиент,[object Object],27,[object Object]
3-х звенная архитектура,[object Object],БД,[object Object],Сервер приложений,[object Object],Клиент,[object Object],28,[object Object]
SOA,[object Object],Сервис 1,[object Object],29,[object Object],Сервис 2,[object Object],Сервис 3,[object Object]
Enterprise Service Bus,[object Object],Система 1,[object Object],Система 2,[object Object],Система 3,[object Object],ESB,[object Object],30,[object Object]
Почему распределенная архитектура?,[object Object],Безопасность,[object Object],Эффективность,[object Object],Совместная работа,[object Object],31,[object Object]
DDD в распределенных приложениях,[object Object],32,[object Object]
Клиент,[object Object],Клиент-Сервер,[object Object],БД,[object Object],ORM,[object Object],Доменная модель,[object Object],33,[object Object]
Проблемы?,[object Object],34,[object Object]
Нет проблем!,[object Object],БД,[object Object],Доменная модель,[object Object],ORM,[object Object],35,[object Object]
3-х звенная архитектура,[object Object],Сервер приложений,[object Object],Клиент,[object Object],БД,[object Object],ORM,[object Object],Доменная модель клиента,[object Object],Доменная модель сервера,[object Object],36,[object Object]
Проблемы?,[object Object],37,[object Object]
Проблемы,[object Object],Как?,[object Object],Построить взаимодействие с сервером ,[object Object],Преобразовать данные в доменную модель на клиенте,[object Object],38,[object Object],?,[object Object],Доменная модель клиента,[object Object],?,[object Object]
SOA,[object Object],ORM,[object Object],Доменная модель 2,[object Object],Доменная модель 3,[object Object],Доменная модель 1,[object Object],  БД,[object Object],Сервис 1,[object Object],Сервис 2,[object Object],Сервис 3,[object Object],39,[object Object]
Проблемы?,[object Object],40,[object Object]
Проблемы,[object Object],Как?,[object Object],Построить взаимодействие другими сервисами,[object Object],Преобразовать данные в локальную доменную модель,[object Object],41,[object Object],?,[object Object],Доменная модель,[object Object],?,[object Object]
Проблемы,[object Object],Как? ,[object Object],Сочетать использование ORM и работу с другими сервисами?,[object Object],42,[object Object],БД,[object Object],Доменная модельсервиса,[object Object],ORM,[object Object]
Enterprise Service Bus,[object Object],Доменная модель 2,[object Object],Доменная модель 3,[object Object],ORM,[object Object],Доменная модель 1,[object Object],  БД,[object Object],Система 3,[object Object],Система 2,[object Object],Система 1,[object Object],ESB,[object Object],43,[object Object]
Проблемы?,[object Object],44,[object Object]
Проблемы,[object Object],Как?,[object Object],Построить взаимодействие с шиной,[object Object],Преобразовать данные из шины в доменную модель,[object Object],45,[object Object],ESB,[object Object],?,[object Object],ESB,[object Object],Доменная модель системы,[object Object],?,[object Object]
Проблемы,[object Object],Как? ,[object Object],Сочетать использование ORM и работу с шиной,[object Object],46,[object Object],БД,[object Object],Доменная модельсервиса,[object Object],ORM,[object Object],ESB,[object Object]
Проблемы в DDD в распределенных приложениях,[object Object],Взаимодействие с удаленными  источниками данных,[object Object],47,[object Object],?,[object Object]
Проблемы в DDD в распределенных приложения,[object Object],Преобразование данных из удаленных источников в доменную модель,[object Object],48,[object Object],Данные,[object Object],Доменная модель системы,[object Object],?,[object Object]
Сервис временно недоступен,[object Object],Соединение,[object Object],Распределенная архитектура вносит в модель объекты отсутствующие в предметной области,[object Object],Данные по запросу,[object Object]
Проблемы в DDD в распределенных приложения,[object Object],Сочетание различных источников данных,[object Object],50,[object Object],Доменная модель,[object Object],Данные,[object Object],Данные,[object Object]
Развитие DDD,[object Object],51,[object Object],2002 год,[object Object],2003 год,[object Object],2008 год,[object Object]
Причины,[object Object],Отсутствие шаблонов для удаленного взаимодействия ,[object Object],Отсутствие готовых инструментальных средств,[object Object],52,[object Object]
Как быть?,[object Object],53,[object Object]
Шаблоны удаленного взаимодействия,[object Object]
RPC (Remote Procedure Call),[object Object],.NET Remoting,[object Object],CORBA,[object Object],WCF,[object Object],и т. д.,[object Object],55,[object Object]
Почему нет?,[object Object],56,[object Object]
Почему нет?,[object Object],Доменные модели разные,[object Object],Стоимость удаленного вызова на порядки выше стоимости локалького,[object Object],57,[object Object]
Data Transfer Object,[object Object]
Доменная модель 2,[object Object],Доменная модель 1,[object Object],DTO,[object Object],59,[object Object]
60,[object Object],Доменная модель,[object Object],DTO,[object Object]
Инструменты,[object Object]
Что делать?,[object Object],62,[object Object],Логика преобразования данных и удаленного взаимодействия,[object Object],Модель предметной области,[object Object]
Что делать?,[object Object],Разработать инструментарий,[object Object],63,[object Object]
Принимаем решение,[object Object],64,[object Object]
Клиент-сервер,[object Object],Множество инструментов и платформ,[object Object],Готовые архитектурные шаблоны,[object Object],DDD – выгодно,[object Object],65,[object Object]
3-х звенная архитектура,[object Object],Тонкий клиент – см. клиент-сервер,[object Object],Толстый клиент:,[object Object],Мало логики – не использовать DDD на клиенте,[object Object],Средне логики – помещать инфраструктурный код в доменную модель,[object Object],Много логики – разработать свой слой преобразования данных,[object Object],66,[object Object]
SOA и ESB,[object Object],Удаленного взаимодействия немного –   поместить логику преобразования данных в доменную модель,[object Object],Иначе – разработать свой слой преобразования данных,[object Object],67,[object Object]
Подводим итоги,[object Object],68,[object Object]
Распределенная архитектура – данность,[object Object]
Что нам дает DDD,[object Object],Эффективный способ борьбы со сложностью,[object Object],Единый язык,[object Object],Низкая стоимость разработки и сопровождения,[object Object],70,[object Object]
Но есть проблемы!,[object Object]
Так что же делать?,[object Object],Оценить:,[object Object],Сложность доменной модели,[object Object],Необходимость сильно распределенной архитектуры,[object Object],Стоимость разработки собственных инструментов,[object Object],72,[object Object]
Вопросы?,[object Object],Докладчик: Николай Гребнев,[object Object],e-mail: ngrebnev@gmail.com,[object Object],http://www.slideshare.net/ngrebnev/domain-driven-design-6988494,[object Object],73,[object Object]

Contenu connexe

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

Базы данных лекция №11
Базы данных лекция №11Базы данных лекция №11
Базы данных лекция №11Vitaliy Pak
 
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБДКак использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБДAndrew Sovtsov
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийSQALab
 
Практика разработки корпоративных веб приложений 2007
Практика разработки корпоративных веб приложений 2007Практика разработки корпоративных веб приложений 2007
Практика разработки корпоративных веб приложений 2007rglab
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодCUSTIS
 
Шаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияШаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияAlexander Byndyu
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииАнтон Шабовта
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложенийYandex
 
Presentation zwcad2011
Presentation zwcad2011Presentation zwcad2011
Presentation zwcad2011ZWCAD Support
 
Entity Framework & Code First
Entity Framework & Code FirstEntity Framework & Code First
Entity Framework & Code FirstIlya Polishchuk
 
введение в SharePoint
введение в SharePointвведение в SharePoint
введение в SharePointIvan Padabed
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыSergey Nemchinsky
 
Строим простые и масштабируемые бекэнды
Строим простые и масштабируемые бекэндыСтроим простые и масштабируемые бекэнды
Строим простые и масштабируемые бекэндыDenis Ivanov
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах EmbarcaderoAndrew Sovtsov
 
Миграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами EmbarcaderoМиграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами EmbarcaderoAndrew Sovtsov
 

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

DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
Базы данных лекция №11
Базы данных лекция №11Базы данных лекция №11
Базы данных лекция №11
 
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБДКак использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД
Как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требований
 
Diplom 1
Diplom 1Diplom 1
Diplom 1
 
MW
MWMW
MW
 
Практика разработки корпоративных веб приложений 2007
Практика разработки корпоративных веб приложений 2007Практика разработки корпоративных веб приложений 2007
Практика разработки корпоративных веб приложений 2007
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
C# 3.0
C# 3.0C# 3.0
C# 3.0
 
Шаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решенияШаблоны интеграции - актуальные инструменты и решения
Шаблоны интеграции - актуальные инструменты и решения
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложении
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений
 
Presentation zwcad2011
Presentation zwcad2011Presentation zwcad2011
Presentation zwcad2011
 
Entity Framework & Code First
Entity Framework & Code FirstEntity Framework & Code First
Entity Framework & Code First
 
введение в SharePoint
введение в SharePointвведение в SharePoint
введение в SharePoint
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системы
 
Final bruce
Final bruceFinal bruce
Final bruce
 
Строим простые и масштабируемые бекэнды
Строим простые и масштабируемые бекэндыСтроим простые и масштабируемые бекэнды
Строим простые и масштабируемые бекэнды
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
 
Миграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами EmbarcaderoМиграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами Embarcadero
 

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.