Поток сознания
DDD - это моделирование Единого языка в явно обозначенных Ограниченных контекстах. Ближайшая аналогия - языки разных стран. В разных странах одни и те же слова обретают разные оттенки смысла (испанский в странах Латинской Америки), в разных Ограниченных контекстах - тоже.
Ограниченный контекст - это семантические границы, внутри которых каждый компонент имеет свое название и играет свою роль.
Единый язык появляется при переходе от концептуального проектирования (описание пространства задачи) к реализации (в терминах пространства решения). Между этими пространствами всегда существует разрыв, сократить который стремится объектно-ориентированное проектирование.
Единый - потому что он един как для области задачи, так и для области решения, и все в команде способны говорить о модели предметной области на нем. Язык должен быть строгим, формальным и не допускать двусмысленностей.
DDD применяется там, где бизнес-сложность превышает техническую сложность.
Вавилонская башня - настолько успешный проект, что даже божественная сущность запереживала.
@why-ddd:Зачем нужен Единый язык?
- ПО, понятное и имеющее смысл для бизнеса, а не только для программистов.
- ПО становится инвестицией в развитие бизнеса, близкой к тому, что сделали бы руководители и эксперты, если бы умели программировать.
- Постоянное обучение. Ни один отдельно взятый человек не может знать всех деталей бизнеса. Общение и обратная связь запускает процесс постоянного обнаружения новых деталей. Все участники проекта постоянно учатся, см. Обучение всех участников по ходу проекта.
- Централизация и общедоступность знания. Знание предметной области, отраженное в точных и недвусмысленных формулировках Единого языка, звучащих в ежедневном общении и зафиксированное в коде, способно пережить смену поколений разработчиков, экспертов и других членов команды.
- Полное отсутствие “переводов” с одного языка на другой.
- Дизайн полностью соответствует коду. Дизайн приложения - это не схемы, квадратики и стрелочки, это - работающая спецификация, это то, как реально работает код. Agile-методики позволяют гибко и эффективно экспериментировать в поисках наиболее подходящего дизайна.
Единый язык - это наилучший возможный язык для проекта. Он необязательно идентичен языку бизнеса, хотя бизнес, очевидно, оказывает значительное влияние на его формирование. Такой язык должен обладать максимальной полезностью для бизнеса, то есть при выборе между реалистичной и полезной моделью следует склоняться в сторону полезности.
Главная цель DDD - соответствие бизнес-идеи, дизайна, модели и кода. Это достигается с помощью обсуждений, слушания, понимания и открытий с целью централизации (и отчуждения?) знаний.
@creation-steps:Шаги создания языка
- Концептуальные схемы, определяющие основные сущности и действия. Здесь же могут появиться и сценарии - описания того, как работает модель. Тут полезны уточняющие прилагательные, много глаголов (действия) и, возможно, роли участников.
- Глоссарий с простыми определениями. Здесь же стоит перечислять синонимы (альтернативные термины), неудачные попытки с указанием того, что именно не получилось (почему термин не прижился или оказался неудачным).
- Постоянное ревью с командой и использование этих терминов и фраз в постоянном общении.
- Превратить сценарии в исполняемые спецификации.
Прямое общение экспертов предметной области и разработчиков с короткими циклами обратной связи - лучший метод формирования такого языка.
Язык всегда будет развиваться, и словари - это не железобетонная модель и не истина в последней инстанции, а всего лишь документация. Истина - в коде и разговорах, и если словари сложно поддерживать в актуальном состоянии, то лучше от них отказаться.
Одно из следствий Единого языка, проявленное в коде - узкая специализация и четкий контекст выполнения отдельных методов (случайное дублирование).
Различные языки в процессе разработки ПО