Доменно-ориентированное проектирование DDD
Главное — не использовать сразу несколько ключей, потому что поисковики заметят переоптимизацию и снизят влияние ключевых слов на позиции домена. Хорошее имя легко запомнить и набрать в браузере, поэтому лучше подобрать домен, в котором будет domain driven design что это не больше двух простых слов. Повсеместный язык позволяет разработчикам и бизнес-экспертам более эффективно сотрудничать.
Основные концепции Domain-Driven Design
Однако по разным причинам (сложность, ограничение по времени, ограничения возможностей разработчиков и т. Д.) Многие люди неосознанно будут сопротивляться принятию DDD. Иногда программный проект переписывается дважды, а второй раз все еще не работает. Фактически, с использованием метода проектирования DDD, наша фаза проектирования стала очень легкой и гибкой. Пока разработчик может нарисовать и описать взаимосвязь между моделями предметной области и достичь соглашения с требовательным персоналом, Что выходит в основном надежно.
Подведем итог: что дает клиенту и разработчику DDD
Проектирование, ориентированное на предметную область, хорошо подходит для небольших автономных команд. Примером этого является концепция «команды с двумя пиццами» . Идея состоит в том, что команда должна быть достаточно маленькой, чтобы ее можно было накормить всего двумя пиццами. Это обеспечивает концентрацию, согласованность и продуктивность.
«Внедрение доменно-ориентированного дизайна» (США) Вернон 1 Глава Введение в DDD
Игнорирование важности коммуникации может привести к недопониманию, несовпадению целей и неэффективным процессам разработки. Подчеркните ценность эффективного общения и сотрудничества для обеспечения успешного внедрения DDD. Одной из распространенных ошибок DDD является чрезмерное проектирование решения, которое может добавить ненужную сложность системе. Очень важно сбалансировать сложность предметной области с технической реализацией. Сосредоточьтесь на логике и требованиях основной предметной области и не поддавайтесь искушению решать проблемы, которые еще не существуют. Простота должна быть приоритетом для обеспечения удобного в обслуживании, масштабируемого и мощного решения.
Неспособность достичь общего понимания между членами команды.
Наши специализированные команды создают архитектуры, которые естественным образом подходят для доменов наших клиентов, а активное участие экспертов в предметной области позволяет нам создать бесперебойную цепочку коммуникаций, в которой участвуют все. Возможно, чем больше компаний осознают необходимость такого подхода, тем более ценные преимущества DDD откроются в будущем. Вездесущий язык создается и поддерживается в ограниченном контексте. Он включает в себя специализированные термины, фразы и правила, которые отражают понимание бизнеса и предмета системы.
Если эта часть переплетается с кодом, который решает другие проблемы, ее будет сложно понять и улучшить. Четкое разделение логики предметной области от всех остальных функций уменьшит утечку и позволит избежать путаницы в большой и сложной системе. Он фокусируется в основном на бизнес-проблеме и на том, как строго организовать логику, которая ее решает. Этот подход был впервые описан Эриком Эвансом в его книге « Доменно-ориентированный дизайн, решающий сложность в основе программного обеспечения» . В 2004 году, когда Эрик Эванс«Доменно-управляемый дизайн – способ справиться с основной сложностью программного обеспечения»(В дальнейшем именуемый «Дизайн, управляемый доменом»…
Все это приводит к тому, что объект рано или поздно приходит в несогласованное состояние. Если бы мы как-то умели проверять инвариант объекта, мы бы часто видели, что объект не отвечает своему инварианту. Для определения границ объекта нам могут помочь данные — не сами по себе, а их источник. Если данные приходят из двух разных источников, то, скорее всего, здесь два Bounded Context, две модели. Как только мы повезли заказ куда-то, он сразу становится другой моделью. И тогда для курьера заказ будет иным, чем для пользователя на веб-сайте.
В обычном подходе, где мы пишем state и баланс в базу, мы бы устали вычищать эту ошибку. Нам бы пришлось поднимать первичные документы, высчитывать руками данные каждого человека, и потом только отображать. И здесь мы можем использовать подход Outbox Pattern в рамках Eventual Consistency (конечной согласованности), чтобы сохранять не весь объект сразу, а только его часть, отправляя уведомление через нашу шину другим Bounded Context. Представим, что мы написали свой Фейсбук, и там каждый пост — это агрегат, а лайк — часть этого агрегата. Проблема больше в том, что будет очень сложно соблюсти consistency нашего объекта. Если было поставлено 5 тысяч лайков, мы в итоге хотим увидеть на вьюшке именно столько.
Агрегаты – это коллекции связанных сущностей и объектов-значений, сгруппированные вместе, представляющие границу транзакции. Каждый агрегат имеет сущность, которая обращена наружу и контролирует весь доступ к объектам внутри границы, эта сущность называется агрегатным корнем, и это единственный объект, с которым могут взаимодействовать другие объекты. Никакие объекты внутри Aggregate не могут быть вызваны напрямую из внешнего мира, что обеспечивает внутреннюю согласованность. Создание ассоциаций между объектами предметной области и описание их функциональности с первого взгляда кажется простым, но правильное различение их значения и причины существования должно быть сделано ясным и интуитивно понятным способом.
И самое плохое, что у такого объекта нет границ и нет контракта. Мы не можем написать для него какие-то инварианты, потому что он слишком размазанный. Делая новую фичу, вам придется добавлять новые поля, и в какой-то момент у вас может появиться толерантность к плохому проектированию. Другая большая проблема такого подхода — это универсальные модели. Вы, конечно, можете выбрать только те поля, которые нужны в application-сервисе. Но модель к вам уже пришла целиком, а вы не использовали ее в полную силу.
Соблюдение этих основных принципов предметно-ориентированного проектирования гарантирует, что разрабатываемое программное обеспечение будет выразительным, будет развиваться вместе с бизнес-сферой и эффективно отвечать потребностям организации. В растущих системах стоимость поддержки плохого кода вырастает в геометрической прогрессии, тогда как сложность планирования на старте разработки почти линейная при линейной сложности предметной области. Применение DDD делает поддержку сервиса не только проще для разработчика, но и дешевле для заказчика. У нас тоже есть монолит, который мы начали писать много лет назад, и большая часть его логики реализована таким образом. Сервисы передают объекты друг другу, заполняя попутно какие-то поля или возвращая из себя новые объекты, но, тем не менее, эти объекты — дырявые. Поскольку реализация проходит через множество итераций, а сложность системы постоянно растет, поддерживать контроль над ней может быть непросто.
Поддержание их целостности при одновременном обеспечении того, чтобы система не неправильно управляла их сложным жизненным циклом, является одной из основных задач, которые представляет собой реализация правильной модели предметной области. Предметно-ориентированное проектирование не является какой-либо конкретной технологией или методологией. DDD — это набор правил, которые позволяют принимать правильные проектные решения. Данный подход позволяет значительно ускорить процесс проектирования программного обеспечения в незнакомой предметной области.
- Мы привыкли начинать проект с базы данных, хотя она может стать одним из источников проблем для бизнес-приложения.
- Кроме того, создание объекта-значения всегда должно зависеть от достоверности данных, используемых для их создания, и от того, как они соблюдают бизнес-инварианты.
- Мы видим, как подход «команды двух пицц» в сочетании с DDD успешно применяется к таким лидерам отрасли, как Netflix (это позволило им быстро масштабировать платформу) и Uber (они смогли гибко изолировать инциденты и управлять колебаниями спроса).
- Каждый предметный термин, фраза или предложение в пределах всей границы – общего языка – имеет определенное контекстное значение.
- Например, заказ никогда не может быть размещен, если запас определенного продукта равен нулю.
Однако способность к интеграции зависит от конкретных потребностей и приоритетов. Интеграция DDD может быть полезна, если небольшая организация имеет сложную предметную область или сталкивается с необходимостью эффективного управления и моделирования бизнес-процессов. Ограниченный контекст в DDD — это локализованный набор моделей и правил, применяемых в конкретной бизнес-домене. Это помогает разграничить и ограничить различные аспекты системы в определенном контексте. Создание универсального языка принесет пользу всем людям, работающим над программным обеспечением, поскольку и разработчики, и клиенты говорят на одном языке.
Нам нужно спроектировать тесно связанный бизнес как модель предметной области и скрыть некоторые детали внутри модели предметной области. Таким образом, модель предметной области и модель предметной области Отношения между ними станут простыми. Эта идея эффективно уменьшает неразрывные взаимосвязи между сложными предприятиями. Тщательно подумайте о режиме анемии, самым большим недостатком является то, что бизнес-логика не может быть повторно использована, и бизнес-логика не организована как многоразовая замкнутая бизнес-модель. Этот подход также приведет к тому, что бизнес-логика и правила, зависящие от предметной области, будут распределены доменно ориентированный подход в разработке по по нескольким классам служб, а в некоторых случаях будет дублироваться логика.
IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ .