Наш новый проект только начался, и у нас есть проблема, связанная с его архитектурой.
У нас есть трехуровневая архитектура:
- WebUI
- Бизнес
- DataRepositories
Каждый слой имеет ссылку только на слой под ним.Связь осуществляется с помощью того, что мы называем entities
и business objects
(BO) следующим образом:
DataRepositories <--entities--> Business <--BO--> WebUI
<--X-->
означает связь с использованием объектов типа X.
Итак, мы имеемнапример UserEntity
как сущность и User
как БО.Другим типом является тикет, который снова имеет TicketEntity
и Ticket
.
В настоящее время у нас есть несколько различных вертикальных срезов через слои, имеющие что-то вроде Accounts
для пользователей в DataRepositories, Business и WebUI, которые хорошо определены ине взаимодействуйте с другими срезами, такими как Tickets
.
Теперь проблема в том, что у билета есть покупатель, который является пользователем, и мы не знаем, где в нашей архитектуре мы должны соединять билеты и пользователей.Должны ли бизнес-компоненты взаимодействовать между ними или уровень данных должен сопоставлять пользователя с заявкой?
Если говорить точнее, у нас есть метод для создания заявки, которая находится в Business и вызывается из WebUI.Он принимает в качестве аргументов детали заявки и «пользователя», которых мы пока не знаем, должен ли он быть объектом типа user или просто username / id.Если мы передадим объект пользователя, то презентация должна получить пользователя до вызова CreateTicket.Но если webui передает идентификатор, то бизнес-уровень должен разрешить объект пользователя, для чего потребуется добавить ссылку на бизнес-компонент Users в Tickets (Business).