Домен – это область знаний, связанная с проблемой, которую мы пытаемся решить.
Модель предметной области представляет те аспекты предметной области, которые относятся к конкретной проблеме.
Domain Driven Design направлен на создание стратегического программного обеспечения на основе моделей предметной области и определяет две основные концепции для достижения этой цели.
- Ограниченный контекст – это подсистема, которая определяет конкретную ответственность с явными границами. Например, в приложении для покупок мы создаем компоненты для поддержки Контекста продаж, а другие — для поддержки Контекста покупателя.
- Вездесущий язык отражает язык, на котором говорят члены команды, работающие в ограниченном контексте.
Использование ограниченных контекстов уменьшает связь между подсистемами, и мы можем обмениваться данными между ними через явный API, избегая зависимостей.
Как разработчики, мы должны выбирать для наших переменных подходящие имена, которые отражают бизнес-термины, используемые во всех каналах связи на этапе проектирования наших моделей предметной области.
Тематическое исследование
Business-to-Business (B2B) — это бизнес, который ведется между одной компанией и другой.
Ведущая компания внедряет портал электронной коммерции для продажи футболок от различных поставщиков и производителей.
Поставщик хочет избежать дублирования усилий по ручной загрузке изображений с обеих сторон и просит ведущую компанию использовать внутренний API для обновления изображений своих продуктов.
В процессе интеграции бизнес-эксперты и разработчики постоянно общаются для уточнения требований. Например.
- Поставщик сообщает группе разработчиков, что его внутренний API описывает атрибут mediaAssetID для уникальной идентификации объекта изображения в его домене.
- Взаимодействия по электронной почте происходят, чтобы прояснить, как создать путь URL для получения конечного объекта изображения с использованием атрибута mediaAssetID.
Понимать бизнес-концепции, прежде чем переводить их в исходный код
Вездесущий язык — это язык бизнеса. Технические имена не могут описывать бизнес-домен.
Некоторые разработчики могут указать следующий дизайн класса, когда ваш ограниченный контекст преобразуется в исходный код.
Атрибут imageId — хорошее название, но оно уже может использоваться в других бизнес-доменах. Мы, как разработчики, иногда отключаемся от бизнеса и ищем имена переменных, которые обычно соответствуют соглашениям, стандартам, языкам программирования, рекомендациям фреймворка или техническим терминам.
Если мы занимаемся анализом требований уже несколько недель, почему бы не ввести ту же бизнес-терминологию в имена наших переменных? Имена переменных раскрывают намерения.
Вездесущий язык пытается представить влияние структур делового общения на программное обеспечение. По возможности старайтесь использовать бизнес-терминологию в именах переменных.
Никогда не предполагайте и не задавайте вопросов, чтобы прояснить двусмысленные термины и синонимы.
Вы получаете задание на реализацию сервиса для получения документов, используемых при отгрузке товаров, и решаете назвать его отгрузочные накладные. Но ваш бизнес не отправляет товары по морю!
Всегда задавайте вопросы своим коллегам и бизнес-экспертам, чтобы прояснить бизнес-концепцию. Затем вы поймете, что в вашем сервисе должны быть реализованы заметки о доставке.
Следующий дизайн класса представляет фундаментальную концепцию в ментальной модели эксперта в предметной области.
Используйте вездесущий язык как инструмент для эффективного общения и обмена знаниями.
«Принципы проектирования программного обеспечения: практическое руководство (английское издание)
Принципы проектирования программного обеспечения — это рекомендации, которые помогают разработчикам сделать объектно-ориентированную систему устойчивой к…amzn .к"
Мне нравится делиться своими знаниями и опытом в Java-программировании, Собеседованиях по кодированию, Алгоритмах, Структурах данных, Чистом коде, Принципах SOLID, Распределенных системах, Spring Framework, Веб-сервисах, Разработке программного обеспечения и др. Технические темы.
Первоначально опубликовано на https://codersite.dev 27 августа 2022 г.