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