SlideShare a Scribd company logo
1 of 16
DDD:
(Domain-Driven Design)

или миром правят три буквы

Пинин Денис
dpinin@codereign.net
Проблемно-ориентированное проектирование (DDD)
(англ. Domain-driven design) — это набор принципов и
схем, помогающих разработчикам создавать изящные системы
объектов.
При правильном применении оно приводит к созданию
программных абстракций, которые называются
моделями предметных областей.
В эти модели входит сложная бизнес-логика, устраняющая
Wikiped
промежуток между реальными условиями области ia
применения продукта и кодом.
Домен (англ. domain) — область знаний. Область знаний, к
которой применяется разрабатываемое программное
обеспечение.
Модель (англ. model) — описывают отдельные аспекты
области и могут быть использованы для решения
проблемы.
Wikiped
Язык описания — используется для единого стиля ia
описания домена и модели.
DDD – как оно начиналось
Domain-Driven Design:
Tackling Complexity in the Heart of Software
by Eric Evans
• на английском – в 2003 г.
• на русском – в 2010 г.

Applying Domain-Driven Design
and Patterns with Examples in C#
and .NET
by Jimmy Nilsson
• на английском – в 2006 г.
• на русском – в 2007 г.
Что было ДО:

Бизнес-аналитик
Заказчик

Бизнесмодель

Системный-аналитик,
архитектор
Модель
приложения

Разработчик

Что стало ПОСЛЕ:

Заказчик

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

Разработчик
Плюсы модели на едином языке
• Единое поле коммуникации для всех участников проекта
• Верификация модели заказчиком и выявление наиболее
критичных ошибок на этапе постановок
• Простота внесения изменений в требования: их не надо
перетаскивать через несколько моделей
• Гибкость реагирования на ограничения, выявленные при
разработке: их можно передать заказчику посредством модели
и найти решение
Минусы модели на едином языке
• Необходимость понимания модели заказчиком
существенно ограничивает моделирование
•Технические подробности и сложные
формальные методы становятся недоступными
• А без них модель не может служить проектом
для реализации, нужно дополнительное
проектирование
Data Driven vs. Domain Driven
Data Driven:
Плюсы
• Позволяет быстро разработать приложение или
прототип
• Удобно проектировать (кодогенерация по схеме
и тп)
• На небольших или средних по размеру проектах
может быть вполне себе решением
Минусы
• Может приводить к анти-паттернам и уходу от
ООП
• На больших проектах приводит к
хаосу, сложной поддержке и т.п.
Data Driven vs. Domain Driven
Domain Driven:
Плюсы
• Использует всю мощь ООП
• Позволяет контролировать сложность
контекстной области (домена)
• Создание доменного языка и внедрение BDD
• Дает мощный инструмент для разработки
сложных и больших решений
Минусы
• Требует значительно больше ресурсов при
разработке, что приводит к удорожанию решения
• Определенные части становятся сложнее в
поддержке (мепперы данных и т.п.)
Какие цели мы достигаем с DDD
• Откладывание реализации слоя сохранения позволяет реализовать его
тогда, когда доменная модель уже спроектирована и реализована, то
есть когда она устаканилась.
• Слой сохранения реализуется как всего лишь один из
инфраструктурных инструментов, а не как жизненно важный слой
приложения. Акцент смещается на модель, а не на базу данных и слой
доступа к ней. Это дает намного более сильный уровень независимости
классов и дает возможность быстро поменять базу данных.
• За счет того, что ваш код может жить и без слоя сохранения, его
можно намного проще протестировать. Более того, в начале можно
написать сначала модель, которую покрыть модульными тестами.

• Из предыдущего пункта вытекает то, что если вы апологет TDD, то
DDD - это точно ваше. Более подходящий для TDD способ
проектирования и разработки приложений сложно себе представить
Кроме всего прочего, Domain Driven
Design стимулирует проектировать Rich
Domain Model, то есть сущности, которые
обладают не только состоянием, но и
поведением.
Anemic vs. Rich Domain Model
• Простота построения. 90% решений, могут быть построены в
данной модели и это будет на порядок дешевле.
• Бизнес-объекты – отчуждаемы. В результате, бизнес-объект
может быть спокойно пронесен от DAL, к фасаду и даже далее.
Беспрепятственно и идентично сериализован/десериализован
между физическими слоями.
• Прогнозируемость и управляемость вплоть до DAL. В
случае, если вы ворочаете большими объемами данных, в
Anemic вам проще управлять запросами к базе данных, чем в
Rich. База данных была и остается самой тяжелой частью
бизнес приложений. Оптимизация в основном достигается за
счет повышения эффективности работы с базой данных.
• Бизнес-объект проще управлять объектами, которые еще не
полностью в валидированном состоянии. В Rich – наличие
валидаторов обязывает держать валидированное состояние. Во
многом, бизнес-объект больше похож на данные, чем на объект
в стиле объектного программирования.
Anemic vs. Rich Domain Model
• Простота использования. Объекты всегда под рукой.
Средства обработки объектов, также под рукой.
Использовать Rich – значительно проще, особенно
когда в проекте новичок.
• Инкапсуляция. Программисту, использующему
данный объект, недоступно его состояние, кроме как
определенный интерфейс. Это локализует некоторые
изменения в логике. Но тут следует упомянуть, что те
изменения, которые касаются состояния, также
отслеживаются компиляцией со статической
типизацией в Anemic, что покрывает большее
количество таких проблем.
• Меньшее количество мусора в силу более сильной
локализации логики.
ORM

DDD

TDD

SOLID
Дополнительно почитать о DDD можно в умных
книжках:
• Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart
of Software
• Jimmy Nilsson. Applying Domain-Driven Design and Patterns: With
Examples in C# and .NET
• Tim McCarthy. .NET Domain-Driven Design with C#: Problem Design - Solution (Programmer to Programmer)

И в онлайне:
• http://domaindrivendesign.org/
• http://hinchcliffe.org/archive/2005/03/20/189.aspx
• http://www.emxsoftware.com/Domain+Driven+Design/
• http://www.infoq.com/articles/ddd-in-practice
• http://www.udidahan.com/2007/03/06/better-domain-driven-design-
ВОПРОСЫ

More Related Content

What's hot

Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovMaxim Tsepkov
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийSQALab
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovMaxim Tsepkov
 
Практика применения 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
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиCUSTIS
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложенийKewpaN
 
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
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииАнтон Шабовта
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияSPbCoA
 
Опыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиОпыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиПрофсоUX
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12Technopark
 
Собираем кубик Рубика
Собираем кубик РубикаСобираем кубик Рубика
Собираем кубик РубикаCEE-SEC(R)
 
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
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииCUSTIS
 
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]Alex V. Petrov
 
CEE-SECR'2011 Бизнес-процессы
CEE-SECR'2011 Бизнес-процессыCEE-SECR'2011 Бизнес-процессы
CEE-SECR'2011 Бизнес-процессыYury Kupriyanov
 
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
 

What's hot (20)

Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
 
DDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требованийDDD — правильный курс в потоке изменений требований
DDD — правильный курс в потоке изменений требований
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkov
 
Практика применения 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-разработки
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений
 
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 ...
 
Применение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложенииПрименение DDD подхода в Symfony 2 приложении
Применение DDD подхода в Symfony 2 приложении
 
Itgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решенияItgm #9. dmn. как моделировать принимаемые решения
Itgm #9. dmn. как моделировать принимаемые решения
 
Опыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурамиОпыт госпроектов и взаимодействия с корпоративными структурами
Опыт госпроектов и взаимодействия с корпоративными структурами
 
C++ осень 2012 лекция 12
C++ осень 2012 лекция 12C++ осень 2012 лекция 12
C++ осень 2012 лекция 12
 
Собираем кубик Рубика
Собираем кубик РубикаСобираем кубик Рубика
Собираем кубик Рубика
 
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]
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революции
 
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]
IT CAMPUS. How to Stop Worrying and Clear Your Technical Debt [RUS]
 
CEE-SECR'2011 Бизнес-процессы
CEE-SECR'2011 Бизнес-процессыCEE-SECR'2011 Бизнес-процессы
CEE-SECR'2011 Бизнес-процессы
 
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...
 

Viewers also liked

DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)Oleg Zinchenko
 
Deployment diagram
Deployment diagramDeployment diagram
Deployment diagramaepetelin
 
Component diagram
Component diagramComponent diagram
Component diagramaepetelin
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout Pavel Tsukanov
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations Pavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Pavel Tsukanov
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladevPavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...Pavel Tsukanov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMPavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИPavel Tsukanov
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВPavel Tsukanov
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++Pavel Tsukanov
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.Pavel Tsukanov
 
TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.Pavel Tsukanov
 

Viewers also liked (18)

DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
 
Deployment diagram
Deployment diagramDeployment diagram
Deployment diagram
 
Component diagram
Component diagramComponent diagram
Component diagram
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
 
RESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGNRESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGN
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
 
Unit tests
Unit testsUnit tests
Unit tests
 
TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.TDD (Test-driven Development) как стиль разработки.
TDD (Test-driven Development) как стиль разработки.
 
PaaS и SaaS
PaaS и SaaSPaaS и SaaS
PaaS и SaaS
 

Similar to Domain Driven Design

03.0 Системы хранения данных
03.0 Системы хранения данных03.0 Системы хранения данных
03.0 Системы хранения данныхКРОК
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковDocsvision
 
Знакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхЗнакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхDenodo
 
Внедрение "Управление документами" Docsvision 5
Внедрение "Управление документами" Docsvision 5Внедрение "Управление документами" Docsvision 5
Внедрение "Управление документами" Docsvision 5Docsvision
 
лекция 12 (2 4часа)
лекция 12 (2 4часа)лекция 12 (2 4часа)
лекция 12 (2 4часа)Anastasia Snegina
 
Знакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхЗнакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхDenodo
 
Построение Data Mesh на основе Виртуальных Данных
Построение Data Mesh на основе Виртуальных ДанныхПостроение Data Mesh на основе Виртуальных Данных
Построение Data Mesh на основе Виртуальных ДанныхDenodo
 
Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?ngrebnev
 
1 big data oracle digi oct
1 big data oracle digi oct1 big data oracle digi oct
1 big data oracle digi octantishmanti
 
Parallels VDI
Parallels VDIParallels VDI
Parallels VDIschlek
 
Технологии анализа и обработки данных
Технологии анализа и обработки данныхТехнологии анализа и обработки данных
Технологии анализа и обработки данныхКристина Обломова
 
Cloud. Business-model-innovation
Cloud. Business-model-innovationCloud. Business-model-innovation
Cloud. Business-model-innovationRuslanKorotaev
 
Top big data architecture patterns by Igor Chub
Top big data architecture patterns  by Igor ChubTop big data architecture patterns  by Igor Chub
Top big data architecture patterns by Igor Chub.NET User Group Dnipro
 
Повышение доверия и обеспечение безопасности использования облачных сервисов ...
Повышение доверия и обеспечение безопасности использования облачных сервисов ...Повышение доверия и обеспечение безопасности использования облачных сервисов ...
Повышение доверия и обеспечение безопасности использования облачных сервисов ...Positive Hack Days
 
Май-Tech. Облачные технологии
Май-Tech. Облачные технологииМай-Tech. Облачные технологии
Май-Tech. Облачные технологииMay-Tech
 
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest
 
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облаку
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облакуРешения Cisco для защищенного ЦОД снижают риск при переходе к частному облаку
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облакуCisco Russia
 
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesInformatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesIlya Gershanov
 

Similar to Domain Driven Design (20)

03.0 Системы хранения данных
03.0 Системы хранения данных03.0 Системы хранения данных
03.0 Системы хранения данных
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиков
 
Знакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхЗнакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данных
 
Sky-Dep
Sky-DepSky-Dep
Sky-Dep
 
Внедрение "Управление документами" Docsvision 5
Внедрение "Управление документами" Docsvision 5Внедрение "Управление документами" Docsvision 5
Внедрение "Управление документами" Docsvision 5
 
лекция 12 (2 4часа)
лекция 12 (2 4часа)лекция 12 (2 4часа)
лекция 12 (2 4часа)
 
Знакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данныхЗнакомство с виртуализацией данных для профессионалов в области данных
Знакомство с виртуализацией данных для профессионалов в области данных
 
Построение Data Mesh на основе Виртуальных Данных
Построение Data Mesh на основе Виртуальных ДанныхПостроение Data Mesh на основе Виртуальных Данных
Построение Data Mesh на основе Виртуальных Данных
 
Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?Разработчик, аналитик, заказчик — как найти общий язык?
Разработчик, аналитик, заказчик — как найти общий язык?
 
1 big data oracle digi oct
1 big data oracle digi oct1 big data oracle digi oct
1 big data oracle digi oct
 
Parallels VDI
Parallels VDIParallels VDI
Parallels VDI
 
Технологии анализа и обработки данных
Технологии анализа и обработки данныхТехнологии анализа и обработки данных
Технологии анализа и обработки данных
 
PMIufa 2011-03-24
PMIufa 2011-03-24PMIufa 2011-03-24
PMIufa 2011-03-24
 
Cloud. Business-model-innovation
Cloud. Business-model-innovationCloud. Business-model-innovation
Cloud. Business-model-innovation
 
Top big data architecture patterns by Igor Chub
Top big data architecture patterns  by Igor ChubTop big data architecture patterns  by Igor Chub
Top big data architecture patterns by Igor Chub
 
Повышение доверия и обеспечение безопасности использования облачных сервисов ...
Повышение доверия и обеспечение безопасности использования облачных сервисов ...Повышение доверия и обеспечение безопасности использования облачных сервисов ...
Повышение доверия и обеспечение безопасности использования облачных сервисов ...
 
Май-Tech. Облачные технологии
Май-Tech. Облачные технологииМай-Tech. Облачные технологии
Май-Tech. Облачные технологии
 
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
 
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облаку
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облакуРешения Cisco для защищенного ЦОД снижают риск при переходе к частному облаку
Решения Cisco для защищенного ЦОД снижают риск при переходе к частному облаку
 
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-casesInformatica for Data Warehouse Optimisation and Data Lake Use-cases
Informatica for Data Warehouse Optimisation and Data Lake Use-cases
 

More from Pavel Tsukanov

Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverPavel Tsukanov
 
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVPavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯPavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5Pavel Tsukanov
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫPavel Tsukanov
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.Pavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFPavel Tsukanov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Pavel Tsukanov
 

More from Pavel Tsukanov (15)

Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriver
 
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯ
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫ
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCF
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
 

Domain Driven Design

  • 1. DDD: (Domain-Driven Design) или миром правят три буквы Пинин Денис dpinin@codereign.net
  • 2. Проблемно-ориентированное проектирование (DDD) (англ. Domain-driven design) — это набор принципов и схем, помогающих разработчикам создавать изящные системы объектов. При правильном применении оно приводит к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит сложная бизнес-логика, устраняющая Wikiped промежуток между реальными условиями области ia применения продукта и кодом. Домен (англ. domain) — область знаний. Область знаний, к которой применяется разрабатываемое программное обеспечение. Модель (англ. model) — описывают отдельные аспекты области и могут быть использованы для решения проблемы. Wikiped Язык описания — используется для единого стиля ia описания домена и модели.
  • 3. DDD – как оно начиналось Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans • на английском – в 2003 г. • на русском – в 2010 г. Applying Domain-Driven Design and Patterns with Examples in C# and .NET by Jimmy Nilsson • на английском – в 2006 г. • на русском – в 2007 г.
  • 6. Плюсы модели на едином языке • Единое поле коммуникации для всех участников проекта • Верификация модели заказчиком и выявление наиболее критичных ошибок на этапе постановок • Простота внесения изменений в требования: их не надо перетаскивать через несколько моделей • Гибкость реагирования на ограничения, выявленные при разработке: их можно передать заказчику посредством модели и найти решение
  • 7. Минусы модели на едином языке • Необходимость понимания модели заказчиком существенно ограничивает моделирование •Технические подробности и сложные формальные методы становятся недоступными • А без них модель не может служить проектом для реализации, нужно дополнительное проектирование
  • 8. Data Driven vs. Domain Driven Data Driven: Плюсы • Позволяет быстро разработать приложение или прототип • Удобно проектировать (кодогенерация по схеме и тп) • На небольших или средних по размеру проектах может быть вполне себе решением Минусы • Может приводить к анти-паттернам и уходу от ООП • На больших проектах приводит к хаосу, сложной поддержке и т.п.
  • 9. Data Driven vs. Domain Driven Domain Driven: Плюсы • Использует всю мощь ООП • Позволяет контролировать сложность контекстной области (домена) • Создание доменного языка и внедрение BDD • Дает мощный инструмент для разработки сложных и больших решений Минусы • Требует значительно больше ресурсов при разработке, что приводит к удорожанию решения • Определенные части становятся сложнее в поддержке (мепперы данных и т.п.)
  • 10. Какие цели мы достигаем с DDD • Откладывание реализации слоя сохранения позволяет реализовать его тогда, когда доменная модель уже спроектирована и реализована, то есть когда она устаканилась. • Слой сохранения реализуется как всего лишь один из инфраструктурных инструментов, а не как жизненно важный слой приложения. Акцент смещается на модель, а не на базу данных и слой доступа к ней. Это дает намного более сильный уровень независимости классов и дает возможность быстро поменять базу данных. • За счет того, что ваш код может жить и без слоя сохранения, его можно намного проще протестировать. Более того, в начале можно написать сначала модель, которую покрыть модульными тестами. • Из предыдущего пункта вытекает то, что если вы апологет TDD, то DDD - это точно ваше. Более подходящий для TDD способ проектирования и разработки приложений сложно себе представить
  • 11. Кроме всего прочего, Domain Driven Design стимулирует проектировать Rich Domain Model, то есть сущности, которые обладают не только состоянием, но и поведением.
  • 12. Anemic vs. Rich Domain Model • Простота построения. 90% решений, могут быть построены в данной модели и это будет на порядок дешевле. • Бизнес-объекты – отчуждаемы. В результате, бизнес-объект может быть спокойно пронесен от DAL, к фасаду и даже далее. Беспрепятственно и идентично сериализован/десериализован между физическими слоями. • Прогнозируемость и управляемость вплоть до DAL. В случае, если вы ворочаете большими объемами данных, в Anemic вам проще управлять запросами к базе данных, чем в Rich. База данных была и остается самой тяжелой частью бизнес приложений. Оптимизация в основном достигается за счет повышения эффективности работы с базой данных. • Бизнес-объект проще управлять объектами, которые еще не полностью в валидированном состоянии. В Rich – наличие валидаторов обязывает держать валидированное состояние. Во многом, бизнес-объект больше похож на данные, чем на объект в стиле объектного программирования.
  • 13. Anemic vs. Rich Domain Model • Простота использования. Объекты всегда под рукой. Средства обработки объектов, также под рукой. Использовать Rich – значительно проще, особенно когда в проекте новичок. • Инкапсуляция. Программисту, использующему данный объект, недоступно его состояние, кроме как определенный интерфейс. Это локализует некоторые изменения в логике. Но тут следует упомянуть, что те изменения, которые касаются состояния, также отслеживаются компиляцией со статической типизацией в Anemic, что покрывает большее количество таких проблем. • Меньшее количество мусора в силу более сильной локализации логики.
  • 15. Дополнительно почитать о DDD можно в умных книжках: • Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software • Jimmy Nilsson. Applying Domain-Driven Design and Patterns: With Examples in C# and .NET • Tim McCarthy. .NET Domain-Driven Design with C#: Problem Design - Solution (Programmer to Programmer) И в онлайне: • http://domaindrivendesign.org/ • http://hinchcliffe.org/archive/2005/03/20/189.aspx • http://www.emxsoftware.com/Domain+Driven+Design/ • http://www.infoq.com/articles/ddd-in-practice • http://www.udidahan.com/2007/03/06/better-domain-driven-design-