Единый язык
Тема дорожной карты · Software Architecture
Единый язык (Ubiquitous Language) представляет собой общий словарь, используемый разработчиками, экспертами домена и кодом. Важность такого подхода заключается в том, чтобы гарантировать, что одно и то же слово несет одно и то же значение во всех контекстах. Это особенно важно, когда термины, используемые экспертами домена, могут отличаться от терминологии, используемой разработчиками. Например, если эксперт говорит "заказ", а разработчики используют термин "транзакция", код может начать отклоняться от реального мира, что может привести к ошибкам и непониманию.
Для поддержания единого языка необходимо применять дисциплину, явно выводить и согласовывать язык в коде, тестах, разговорах и документации. Это включает использование одних и тех же терминов в именах классов, методах, таблицах и других элементах кода. Важно отклонять pull request'ы, которые вводят новые термины, не согласующиеся с существующим словарем, чтобы избежать дрейфа языка.
Как это работает
Постройте глоссарий как живой документ, который постоянно обновляется и используется всеми участниками проекта. Для каждого доменного термина зафиксируйте его определение (словами эксперта домена), границы его применения и синонимы, которых следует избегать. Это поможет избежать путаницы и усилит понимание между экспертами и разработчиками.
Использование терминов в коде должно быть точным и последовательным. Это означает использование терминов из глоссария в именах классов, методах, таблицах и других элементах кода. Отклонение pull request'ов, которые вводят новые термины, не согласующиеся с существующим словарем, помогает сохранить единство языка.
Когда применять
Установите ubiquitous language в начале любого DDD-стиля проекта и защищайте его по мере эволюции системы. Это особенно важно, когда у команды высокая текучка (новички по умолчанию используют generic CS-словарь), когда несколько команд делят кодовую базу (каждое племя дрейфует к своим терминам) и когда у домена тонкие, но важные различия ('customer' vs 'client' vs 'subscriber' могут значить разное).
Типичные ошибки
(1) Глоссарий без принуждения — написан раз, не обновляется, не упоминается; язык дрейфует несмотря на документ. (2) Навязывание словаря разработчиков домену — называние класса 'Repository', когда домен говорит 'Каталог'; язык абстракции побеждает, язык домена проигрывает. (3) Несколько языков без bounded contexts — одно слово значит разное в разных частях системы; см. Bounded Contexts.