Ответ
Ubiquitous Language — это строго определённый набор терминов, общий для всех участников проекта (разработчиков, экспертов предметной области, аналитиков), который используется как в обсуждениях, так и в самом коде. Его цель — устранить неоднозначности и потери при переводе бизнес-требований в программную реализацию.
Как это работает на практике:
-
В коде: Имена классов, методов, переменных и модулей напрямую отражают термины предметной области.
// Вместо общего CustomerService с методом process() public class ShoppingCart { private List<CartItem> items; // Термин из домена: "оформить заказ" public Order checkout(PaymentMethod method) { ... } // Термин из домена: "добавить товар" public void addProduct(Product product, Quantity quantity) { ... } } -
В процессе: Если эксперт говорит "заказ подтверждён", в коде появляется метод
Order.confirm(), а неOrder.setStatus(1). Если в процессе обсуждения выясняется, что "корзина" и "черновик заказа" — это разные сущности, это немедленно отражается в модели.
Ключевые преимущества:
- Снижение когнитивной нагрузки: Разработчикам не нужно мысленно переводить "бизнес-слова" в "технические слова".
- Повышение качества дизайна: Модель становится более точным отражением реальных бизнес-процессов.
- Эффективная коммуникация: Обсуждения и документация становятся понятными для всех сторон.
Единый язык не статичен — он развивается вместе с углублением понимания домена и должен быть зафиксирован в глоссарии проекта.