#java #architecture #domain-driven-design #subdomain #applicationservice
Вопрос:
Могут ли уровень домена и уровень приложения знать о состоянии приложения? Под состоянием приложения я подразумеваю состояние отдельного экземпляра приложения.
Например, если я делаю доставку еды, а пользователь входит в свою учетную запись и размещает заказ. Теперь мне нужно будет добавить этот заказ под этим пользователем, вошедшим в систему в данный момент.
Часть, в которой я запутался, заключается в том, может ли служба слоев приложений, у которой есть функция добавления заказанного элемента в этот список пользователей заказанных элементов, знать, какой пользователь в данный момент вошел в систему, что будет информацией об отдельном экземпляре приложения.
class MakeOrderService {
void makeOrder() {
// Here order is being made assuming this function can get the
// id of the currently logged in user without it being passed
// in as a parameter from the controller where its being called.
}
}
Спасибо.
Ответ №1:
Не делайте это разделение таким строгим. В теории многие вещи разделены, но в бизнес-реальности это не так. Каковы бизнес-правила, зависит от вас и вашего конкретного домена. Я бы рекомендовал вам пройти через различные реализации DDD и посмотреть, как это делается. В вашем конкретном примере, если вы хотите предоставить информацию о текущем зарегистрированном пользователе на уровне приложений, и если в вашем бизнесе есть такое правило, то оно вполне допустимо. Спросите, что означает «зарегистрированный пользователь» в вашем домене? Некоторые приложения позволяют публично просматривать текущих зарегистрированных пользователей. Вы часто могли видеть иногда что-то вроде
127 пользователей онлайн
или
gooUser816461 находится в сети
Комментарии:
1. В этом бизнесе, в моем понимании, пользователь-это тот, кто хочет приобрести или приобрел услугу. Зарегистрированным пользователем будет тот, кто в данный момент хочет совершить покупку. Однако мне все еще не ясно, какой подход я собираюсь использовать, и я не уверен, правильно ли я думаю о пользователе.