Domain driven design
Domain driven design (DDD) — подход к разработке приложений, основанный на выделении доменов (domain).
Домен
Домен — область знаний/деятельности, для которой разрабатывается приложение. Ясно, что для юристов есть свои термины и важные понятия, которые отличаются от слов, используемых в нефтегазовой промышленности. Причем это не просто слова, они отражают важные для заказчика процессы, связи. Именно поэтому важно уделять внимание терминам, которые используются в данной сфере. Это обеспечивается постоянным общением двух сторон — разработчиков приложения и клиентов. Такой подход отражает главный принцип DDD — разработка не должна быть в отрыве от бизнес-задач. DDD не является инструкцией или методологией, а составляет набор правил и ориентиров.
Для небольших и несложных программных продуктов DDD, как и другие принципы проектирования архитектуры, не так важны. Но узкие предметные области, обладающие сложной спецификой, требуют тщательного продумывания на самом высоком уровне. DDD предлагает создавать модели предметных областей, содержащие сложную бизнес-логику.
Модель
Модель — система абстракций, которая описывает отдельные характеристики домена. Как и физическая модель, упрощающая понимание и изучение объекта, помогает решить проблемы, связанные с данным доменом.
Моделирование доменов
Моделирование домена — это техника, используемая при разработке программного обеспечения, в частности в контексте проектирования, ориентированного на домен (DDD), для представления основных концепций, правил и отношений в конкретном бизнес-домене.
Агрегат
Агрегаты представляют собой объединения сущностей и ценностных объектов с четко очерченными границами. Можно представить себе агрегат просто как группу, которая позволяет обращаться сразу ко всем элементам, входящим в неё. Например, вместо того чтобы делать команду «нарезать яблоко» и повторять её n раз, можно все яблоки объединить в группу «яблоки» и применить к этой группе команду «нарезать».
Сервис
Сервисы — это функции, которые не привязаны к сущностям или ценностным объектам. Грубо говоря, действие в себе.
Репозитории
Репозитории — это такие сервисы, которые используют глобальный интерфейс, чтобы обеспечить доступ ко всем сущностям и ценностным объектам, находящимся в конкретной группе агрегатов. Например, можно считать команду «резать» репозиторием, когда она применяется к группе агрегатов «фрукты», которая включает агрегаты «яблоки», «груши», «бананы».
Использование подхода «Domain driven design» при проектировании архитектуры программного обеспечения и сложных корпоративных информационных систем позволяет сделать проще поддержание изменений в проекте и эффективнее тестировать новые релизы.