Доменно-ориентированный дизайн (DDD)
Domain-Driven Design - концепция, представленная программистом Эриком Эвансом в 2004 году в его книге Domain-Driven Design: Tackling Complexity in the Heart of Software .
Это подход к разработке архитектуры программного обеспечения, основанный на нисходящем подходе к программному обеспечению. Прежде чем подробно обсуждать тему, давайте попробуем сфокусировать немного света и понять, что в данном контексте подразумевается под доменом.
Что такое домен?
Слово «домен», используемое в контексте разработки программного обеспечения, относится к бизнесу . В процессе разработки приложений обычно используется термин «логика предметной области» или «бизнес-логика». По сути, бизнес-логика - это область знаний, вокруг которой вращается логика приложения. Бизнес-логика приложения - это набор правил и рекомендаций, объясняющих, как бизнес-объекты должны взаимодействовать друг с другом для обработки смоделированных данных.
Примечание -
Область в области разработки программного обеспечения - это бизнес, на котором предполагается построить приложение.
Доменно-ориентированный дизайн:
Предположим, мы разработали программное обеспечение, используя весь новейший технологический стек и инфраструктуру, и наша архитектура проектирования программного обеспечения великолепна, но когда мы выпускаем это программное обеспечение на рынок, в конечном итоге конечный пользователь решает, хороша наша система или нет. Также, если система не решает бизнес-нужды, она никому не нужна; Неважно, насколько красиво он выглядит или насколько хорошо спроектирована его инфраструктура. По словам Эрика Эванса , когда мы разрабатываем программное обеспечение, мы должны уделять внимание не технологиям, а бизнесу. Помнить,
It is not the customer’s job to know what they want” – Steve Jobs
В предметно-ориентированном дизайне говорится о двух видах инструментов проектирования: первый - это инструменты стратегического дизайна, а другой - инструменты тактического дизайна. Программисты или разработчики обычно имеют дело с инструментами тактического дизайна, но если у нас есть знания и хорошее понимание инструментов стратегического дизайна, это поможет нам в создании хорошей архитектуры программного обеспечения.
Большинство фреймворков в семействе данных Spring построено с учетом подхода к проектированию, основанного на домене.
Стратегический дизайн:
Инструменты стратегического проектирования помогают нам решать все проблемы, связанные с моделированием программного обеспечения. Это подход к дизайну, который похож на объектно-ориентированный дизайн, в котором мы вынуждены мыслить объектами. При этом в стратегическом дизайне мы вынуждены мыслить в терминах контекста.
Контекст:
Мы можем считать это английским словом, которое относится к обстоятельствам события, инцидента, утверждения или идеи и в терминах которых может быть определено его значение.
Помимо контекста, в стратегическом дизайне также говорится о модели, универсальном языке и ограниченном контексте. Это общие термины, используемые в стратегическом проектировании предметно-ориентированного дизайна. Давайте разбираться в каждом по отдельности.
- Модель -
Он действует как основная логика и описывает выбранные аспекты предметной области. он используется для решения проблем, связанных с этим бизнесом. - Вездесущий язык -
Общий язык, используемый всеми членами команды, чтобы связать все действия команды вокруг модели предметной области. Считайте это употреблением общих глаголов и существительных для классов, методов, служб и объектов во время разговора с экспертами в предметной области и членами команды. - Ограниченный контекст -
Это относится к граничным условиям контекста. Это описание границы и действует как порог, в пределах которого определяется и применяется конкретная модель предметной области.
Тактический дизайн:
Тактический дизайн говорит о деталях реализации, то есть о предметной области моделирования. Обычно он заботится о компонентах внутри ограниченного контекста. Возможно, мы слышали или использовали такие вещи, как службы, сущности, репозитории и фабрики. Все они были придуманы и стали популярными благодаря дизайну, основанному на доменах. Процесс тактического проектирования происходит на этапе разработки продукта.
Давайте обсудим некоторые важные инструменты тактического дизайна. Эти инструменты представляют собой концепции высокого уровня, которые можно использовать для создания и изменения моделей предметной области.
- Сущность -
Программист, работавший над объектно-ориентированными принципами, может знать концепции, называемые классом и объектами. Здесь сущность - это класс, у которого есть некоторые свойства. Экземпляр этих классов имеет глобальную идентичность и сохраняет ту же идентичность на протяжении всей жизни. Помните, что состояние собственности может измениться, но личность никогда не изменится. Короче говоря, сущность реализует некоторую бизнес-логику и может быть однозначно идентифицирована с помощью идентификатора. В контексте программирования он обычно сохраняется как строка в БД и состоит из объектов значений. - Объекты-значения -
Это неизменные, легкие объекты, не имеющие никакой идентичности. Объекты-значения уменьшают сложность, выполняя сложные вычисления, изолируя тяжелую вычислительную логику от сущностей.На изображении выше Пользователь - это сущность, а Адрес - это объект значения, адрес может меняться много раз, но личность пользователя никогда не меняется. Каждый раз, когда адрес изменяется, создается новый адрес, который назначается пользователю.
- Услуги -
Служба - это класс без состояния, который подходит для чего-то еще, кроме объекта или объекта-значения. Короче говоря, служба - это функциональность, которая существует где-то между сущностями и объектами значений, но не связана ни с сущностью, ни с объектами значений. - Агрегаты -
Когда у нас есть более крупный проект, граф объектов становится большим. Чем больше граф объектов, тем сложнее его поддерживать. Агрегат - это набор сущностей и значений, которые подпадают под одну границу транзакции. В основном агрегаты управляют изменениями и имеют корневую сущность, называемую агрегатными корнями. Корневая сущность управляет временем жизни других сущностей в совокупности.В приведенном выше примере, если корневой объект " Пользователь" или " Заказ" будет удален, другие объекты, связанные с корневым объектом, будут бесполезны, и эта связанная информация также будет удалена. Это означает, что агрегат всегда согласован по своей природе, и это делается с помощью событий домена. События домена генерируются для обеспечения согласованности в конечном итоге.
В приведенном выше примере, если адрес Пользователя был изменен, он также должен быть отражен в Заказе. Для этого мы можем инициировать событие домена от пользователя к заказу, чтобы Заказ обновлял адрес, чтобы в конечном итоге мы имели согласованность, а Заказ в конечном итоге был согласован.Другими примерами агрегатов и агрегированного корня могут быть комментарии к сообщению, детали вопросов и ответов, детали банковских транзакций и т. Д. Инструмент ORM, такой как hibernate, часто использует агрегаты при создании отношений один ко многим или много к одному.
- Заводы и хранилища -
Фабрики и репозитории используются для обработки агрегатов. Фабрики помогают управлять началом жизненного цикла агрегатов, тогда как репозитории помогают управлять серединой и концом жизненного цикла агрегата. Фабрики помогают создавать агрегаты, тогда как репозитории помогают сохранять агрегаты. Мы всегда должны создавать репозиторий для каждого совокупного корня, но не для всех сущностей.
Фабрики - это шаблоны проектирования от GoF, Фабрики полезны, но не обязательны в контексте правила агрегирования.
Преимущества доменно-ориентированного дизайна:
- Это улучшает наше ремесло.
- Обеспечивает гибкость
- Он предпочитает домены интерфейсу
- Это сокращает разрыв в общении между командами с помощью универсального языка.
Недостатки доменно-ориентированного дизайна:
- Требуется профессионал, обладающий большим опытом в предметной области.
- Это побуждает команду следовать итеративным методам.
Вниманию читателя! Не переставай учиться сейчас. Получите все важные концепции теории CS для собеседований SDE с курсом теории CS по доступной для студентов цене и будьте готовы к отрасли.