Может ли уровень домена и уровень приложения знать о состоянии приложения?

#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. В этом бизнесе, в моем понимании, пользователь-это тот, кто хочет приобрести или приобрел услугу. Зарегистрированным пользователем будет тот, кто в данный момент хочет совершить покупку. Однако мне все еще не ясно, какой подход я собираюсь использовать, и я не уверен, правильно ли я думаю о пользователе.