Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
как оценить проект на соответствие Ubiquitous Language и реального языка заказчика?Интервьюируя представителя клиента в таком стиле: «в программе заложена такая-то логика. Это верно? Вы делаете так?». Обычный ответ: «конечно нет!»)
Как понять, что вы выбрали верный Bounded Context?Обычно тоже в ходе беседы: с представителями разных отделов.обычно где-то обнаруживается четкий водораздел. Здесь есть смежный вопрос: «в какой части системы нам нужен DDD, а где можно использовать методологию хуяк-хуяк и в продакшн», но это тема следующей статьи)
Как вообще опредилить используется DDD в проекте или нет?Приемочные/интеграционные тесты. Не всегда применимо, но если есть какой-то вменяемый API, то должно получиться.
Если быть честным с собой, я бы не стал утверждать, что второй совет сработает лучше первого...
Как было давно сказано "К сожалению, большинство людей предпочитают безмерно трудиться, вместо того чтобы немного подумать". Человек всегда ищет методы, которые решать проблемы за него, но на самом деле реально работает только опыт и желание решать проблемы.
var лопата = new Лопата(рабочий);
земля.Копайся(лопата);
Решение такой задачи надо начинать с проектирования экскаватора.class Землекоп: Рабочий
{
//...
}
var рабочий = new Землекоп(лопата);
рабочий.Копать(земля);
А как аналитик узнает что нужно реализовывать, а что нет?
Если у него нет опыта проектирования, то он сможет только нарисовать эти самые «сущности» в виде схемы и правила по которым они работают.
А потом программисты не включая голову запрограммируют эти сущности в виде классов.
Эванс говорит как раз о том, что программисты должны не только слова повторять, а понимать суть. Аналитики в этом случае не сильно нужны.
Уж простите, вы хоть с реальным бизнесом разговаривали хоть раз?
Никак, вы начнете ввожить сущности «каталог», «управление товарами», «управление заказами», которых нет в предметной области и получите не язык предметной области, а язык решения задачи.
Кстати, в вашем примере товар — это, на самом деле, не одна сущность, и может быть опасным их смешивать.
Бизнесу это объясните, для них товар это одна сущность.
Да и в СУБД товар будет в одной таблице.
Само это противоречие говорит нам о том, что для проектирования применять «язык предметной области» нельзя. Не получится в программе разные классы или функции назвать одним именем.
Ну-ну, объясните человеку, который далек от ИТ, что «товар» и «товар» это не одно и то же.
Если у вас товары будут в разных таблицах, то вы замучаетесь это поддерживать.
Пространства имен создадут разные классы и, например, присвоить один другому нельзя.
Заметьте, вы еще ни строчки не написали, а уже усложнили потенциальный код совершенно без необходимости
просто пытаясь следовать тому, что написал Эванс.
Поймите простую вещь — сущности предметной области поведением обладают только если у вас задача моделирования.
Некрокомментарий, но со стороны своего опыта автоматизации ИС должен вас поддержать :)
Ubiquitous Language и Bounded Context в DDD