Я читал во многих книгах, что в многоуровневой архитектуре слой должен использовать только те услуги, которые предоставляются слоями под ним. Обычно используемые уровни в корпоративном приложении:
- Презентация
- Бизнес
- Настойчивость
Это означает, что сервисы на бизнес-уровне (которые содержат бизнес-логику) должны иметь доступ только к услугам, предоставляемым уровнем персистентности.
У меня есть MessageService, который отправляет сообщения пользователям. Всякий раз, когда происходит существенное изменение в состоянии объекта, все связанные пользователи должны быть уведомлены об изменении. Это означает, что Служба на бизнес-уровне, которая идентифицировала изменение, должна отправлять, используя MessageService для отправки сообщений. Но messageService сам по себе находится на бизнес-уровне, поэтому никакой другой сервис из этого уровня не должен получать к нему доступ.
Так как же мы можем использовать MessageService, не нарушая архитектуру кода?