#architecture
#архитектура
Вопрос:
Я пытаюсь выяснить, какие уровни необходимы веб-приложению для четкого разделения задач. Я работаю со средними и большими приложениями с объектами, которые часто взаимодействуют друг с другом.
Пока у меня есть следующее
-
Уровень сущности — моделирует бизнес-объекты и используется во всем приложении
-
Уровень репозитория — отвечает за сохраняемость и все вызовы к базе данных и из нее
-
Сервисный уровень — отвечает бизнес-требованиям
-
Уровень контроллера — обрабатывает запросы и вызывает только службы
-
Слой просмотра
Также для каждого объекта существует выделенный репозиторий и выделенная служба
Мои вопросы заключаются в следующем:
-
Нормально ли, если одна служба сущностей ссылается на другую службу сущностей, или должна быть новая служба, не привязанная к сущности, которая использует службы сущностей?(это более широкий вопрос: каково взаимодействие между слоями)
-
Должен ли существовать другой уровень между хранилищем и службами, такой как Manager (выделенный для объекта, содержащий бизнес-логику, которая относится к этому объекту, точно так же, как сервис в исходной настройке, но используемый только другими службами) и уровень сервиса, который ссылается на уровень менеджера?(tbh это звучит слишком сложно, но если у кого-то есть какие-то аргументы в пользу уровня менеджера и уровня сервиса, пожалуйста, скажите мне)
-
Должен ли уровень представления иметь доступ к службам, на которые ссылается контроллер?(для получения некоторых списков или контроллером должна быть предоставлена вся информация, необходимая для представления?
Спасибо
PS: Я мог бы задать больше вопросов по мере прочтения ответов, если я думаю, что они важны, я обновлю основной пост. PS2: Я был бы признателен, если бы вы могли поделиться любым личным опытом по этому вопросу.
Ответ №1:
- Я бы сказал, да, служба может сотрудничать с другими службами.
- Нет, это излишнее усложнение.
- Контроллер действительно является частью View; они идут рука об руку. Возможно, что представление может вызывать службы, особенно если вы создаете веб-интерфейс с вызовами AJAX.