Базовая c идея: приложение (не модель домена ) отвечает за выборку данных из внешнего мира модели.
Чтобы создать идентификатор участника, Мне нужно взять случайную строку и метку времени, когда пользовательский аккаунт создан. Затем эти два значения отправляются во внешний REST API, и его успешный ответ будет содержать MembershipID.
По сути, у вас есть нечто, похожее на функцию, которая принимает случайное начальное число и отметка времени в качестве аргумента и возвращает членство.
Эта функция будет реализована компонентами приложения, которые знают, как говорить REST, где размещены внешние API и т. д.
Эта функция будет вызываться , как правило, одним из двух способов. Либо приложение выполнит работу, а затем передаст значение в модель домена ...
m = membershipId(domainModel.randomSeed, domainModel.createdTime)
domainModel.assignMembershipId(m)
ИЛИ мы передадим возможность в модель домена, и пусть модель решит, вызывать ее или нет:
DomainModel::doIt(membershipId) {
this.membershipId = membershipId(this.randomSeed, this.createdTime)
}
Разница между двумя подходами заключается в основном в том, как вы справляетесь со сбоями. В первом подходе весь код обработки ошибок живет вне модели домена, которая получает значения только тогда, когда они доступны. Второй ответ поддается более процедурному стилю - вы просто используете обратный вызов, предоставляемый прикладным уровнем, когда хотите, - но вы должны уделять гораздо больше внимания обработке ошибок, когда работаете в коде «домена».
Я считаю, что прежний стиль - когда все сложности, связанные с тем, что внешний API может быть недоступен, когда мы этого хотим, - больше соответствует подходу DDD отделения кода домена от сантехника. По сути, модель домена становится простым в состоянии конечного автомата памяти, который ведет бухгалтерию, и приложение взаимодействует со всеми проблемами сантехники.
прямо сейчас я помещаю внешний API, обращающийся к logi c, внутри доменная служба
Используя верхний стиль, вы реализуете логи доступа c в службе приложений , а не в доменной службе . Получение данных «откуда-то еще» - это не задача моделирования домена, а проблема сантехники.
Второй стиль, когда мы передаем возможность в вызываемую модель домена, аналогичен использованию службы домена. , И вы увидите этот стиль во многих примерах, потому что люди склонны применять шаблоны, чтобы соответствовать тому, что они обычно делают, вместо того, чтобы адаптировать свой стиль, чтобы соответствовать новому шаблону.