DDD Domain Driven Design Всем привет. by Kirill Sereda
Она станет основой для второстепенной функциональности и новых блоков, доменно ориентированный подход в разработке по но не будет подвержена глобальным изменениям, поскольку изначально отображает предметную область. Основа — воссоздание предметной области в коде через бизнес-логику, взаимодействие объектов и соотнесение реальных условий применения продукта с реализацией. На рисунке мы видим описание бизнес-процессов в виде activity diagram, диаграмму классов для документов и диаграмму состояний документов, которые и реализуют бизнес-процесс. Но при этом все три модели — на едином языке и с прозрачной связью между ними. И принципы DDD говорят, что в коде информационной системы должны присутствовать те же самые объекты, а не какая-то другая реализация. Через некоторое время эти же принципы применили для проектирования софта и даже попробовали написать язык, на котором по замыслу авторов непрограммисты могли бы описывать, что им требуется от софта.
Ресурсы по Domain Driven Design
И, наоборот, когда мы говорим про заказ в контексте доставки, нам не важно, сколько грамм теста и сыра мы списали на заказ. Решением будет разделить заказ на три части, так мы избавимся от мусорных полей. Конечно, у нас будут сквозные поля — ID, сумма, например. Но при этом поля, специфичные для одной области знания, не будут засорять другие. Но даже если разработчики все хорошо заполнили, всё равно непонятно, сколько лишних аллокаций памяти мы сделали для того, чтобы этот объект у нас появился в приложении.
Учимся проектировать на основе предметной области (DDD: Domain Driven Design)
Например, вместо того чтобы делать команду «нарезать яблоко» и повторять её n раз, можно все яблоки объединить в группу «яблоки» и применить к этой группе команду «нарезать». Domain driven design (DDD) — подход к разработке приложений, основанный на выделении доменов (domain). В моей следующей статье сущности и объекты-значения с некоторыми примерами кодов. Чтобы понять, как работает бизнес, вам нужно принять участие в некоторых дискуссиях с вашей командой. Это дает вам глубокое понимание бизнес-целей и позволяет эффективно выполнять обнаружение программного обеспечения.
Применение Domain-Driven Design в разработке
В обычном подходе, где мы пишем state и баланс в базу, мы бы устали вычищать эту ошибку. Нам бы пришлось поднимать первичные документы, высчитывать руками данные каждого человека, и потом только отображать. Таким образом мы меняем баланс, но этот баланс только внутренняя переменная в памяти. Мы нигде никогда не храним баланс как число, а просто каждый раз его рассчитываем.
Подведем итог: что дает клиенту и разработчику DDD
DDD — это набор правил, которые позволяют принимать правильные проектные решения. Данный подход позволяет значительно ускорить процесс проектирования программного обеспечения в незнакомой предметной области. DDD, или Domain-Driven Design, это подход к разработке программного обеспечения, который фокусируется на создании программных решений, основанных на модели предметной области. Он подчеркивает важность понимания бизнес-процессов и правил предметной области и их отражения в коде. Итак, мы уже определились с областью применения, методологией и архитектурой. Хотелось бы начать с шаблонов проектирования, которые описывают бизнес логику — Service и Interactor.
Разработка с использованием Domain Driven Design
Он построен на терминах предметной области, который понимают и технические специалисты и аналитики. Так почему код должен быть на языке отличном от языка бизнеса? DDD подчеркивает что код и бизнес должны говорить на одном языке. Когда барьер преодолён, нет необходимости в переводе или утомительной синхронизации, информация не потеряется.
Тем не менее оно может быть расширено за счет расширения самой предметной области. Если эти изменения получилось интегрировать в предметную область, значит и в модель предметной области их интегрировать возможно с минимальными издержками. Создавая модель предметной области, разработчик не только проектирует архитектуру под текущие бизнес-процессы, но и создает возможности для последующего расширения.
Domain Driven Design: модели вместо требований
Тактическое моделирование нужно для построения работающей Доменной Модели с использование проверенных в бою строительных блоков и шаблонов. Вместо этого речь идет о развитии знаний о бизнесе и использовании технологий для обеспечения ценности. Только когда вы сможете понять бизнес, в котором работает ваша компания , вы сможете участвовать в процессе создания модели программного обеспечения порождая так называемый единый язык (Ubiquitous Language). Таким образом, стратегическое проектирование в DDD — это процесс, определяющий компоненты системы и их взаимосвязи. Цель этого процесса — создать систему, которая будет гибкой и адаптируемой к изменениям в предметной области. В растущих системах стоимость поддержки плохого кода вырастает в геометрической прогрессии, тогда как сложность планирования на старте разработки почти линейная при линейной сложности предметной области.
Но после внедрения DDD мы получаем модульный проект, модули которого не зависимы друг от друга, внедрение доработок упрощено, понимание на 80-ом уровне (все говорят на одном понятном языке). Хотя в интернете можно найти много противников данного подхода, так же как и противников Spring Framework, который больше предпочитают Google Guice. Но мы не будем говорить сейчас об этом, вы можете сами более детально продолжать изучать эти концепции и прийти к собственному выводу. Для этого используется такое понятие как Ubiquitous Language — “единый язык”.
Часто на крупных проектах складывается ситуация, когда каждый разработчик понимает только ту часть бизнес-логики, с которой ему непосредственно приходится работать, но не видит полной картины. Из-за этого команда не может учесть всех особенностей системы и увидеть наиболее выигрышные архитектурные решения и оптимальные подходы к реализации отдельных задач. Этот дизайн используется, когда вы создаете свою модель предметной области внутри вашего ограниченного контекста. Строительные блоки — это сущности, объекты значений, агрегаты, службы и репозитории.
- Домен — область знаний/деятельности, для которой разрабатывается приложение.
- Bounded Context — это ограниченная часть системы, в которой мы реализуем нашу бизнес-логику.
- Мы в KozhinDev применяем DDD на практике и расскажем о его преимуществах в статье.
- Bounded Contexts — это своего рода невидимые границы вокруг каждого поддомена.
- Так, без DDD модель «пользователь» описывает все роли, и поэтому очень разрастается.
На конференции Russian Python Week 2020 он выступил с рассказом об этом. Кстати, 19 августа пройдет встреча DDDevotion-сообщества, присоединяйтесь, будем о чем поговорить. Как правило первая итерация представляется собой минимально достаточное смысловое ядро — основной домен проекта и набор прикладной функциональности. Описание в виде черного ящика предполагало, что внутри творится магия, придуманная разработчиками. Но эта магия оказывалась вовсе не такой, на которую рассчитывал бизнес.
Дальше есть некоторый код, который перекладывает наши ивенты через свою бизнес-логику уже в Read-модель. Единственный недостаток — в Event Sourcing и CQRS почти никогда не работает read-your-own-writes, то есть чтение своей записи. Лаг между записью и чтением самого себя может быть очень большим, потому что между этими моделями eventual consistency, то есть код, который перекладывает запись в чтение. Write-модель — это те события, которые падают из приложения. Баланс пополнили, осуществился перевод, сняли деньги, клиент получил штраф, оплатил комиссию, еще что-то.
Различные Application Services и команды меняют объект, добавляя ему мусорных полей. Иногда эти мусорные поля неправильно понимаются другими людьми, и туда начинают попадать несоответствующие данные. Все это приводит к тому, что объект рано или поздно приходит в несогласованное состояние.
На основе этого сделаем небольшой вывод о том, что данный шаблон (“Модель предметной области”) лучше всего подойдёт, к примеру, для такой непростой области, как финансовый рынок. Domain-Driven Design (DDD) — это подход к разработке программного обеспечения, который уделяет особое внимание бизнес-логике и основным понятиям предметной области. Цель DDD — создать программное обеспечение, которое отражает и моделирует реальные бизнес-процессы и позволяет разработчикам легко понять и взаимодействовать с предметной областью. Предметно-ориентированное проектирование (DDD) — это подход к проектированию ПО, который фокусируется на понимании и моделировании предметной области, в которой будет применяться система. Метод призван помогать разработчикам создавать программные продукты, которые лучше соответствуют реальным потребностям пользователей и требованиям бизнеса.
IT курсы онлайн от лучших специалистов в своей отросли https://deveducation.com/ here.
Last updated: Outubro 8, 2024
Comments