Я создаю пользовательский комплект, позволяющий определять несколько типов пользователей, с их собственными репозиториями, менеджерами, поставщиками и т.д. Поэтому я решил вместо создания ограниченного набора контроллеров создать контроллерные заводы, которые будет создавать контроллеры на основе определенных типов пользователей и конфигурации. Но это поднимает важный вопрос: где и как должны работать эти заводы?
Теперь, разумеется, вам не нужно создавать контроллер в factory, мы также должны установить для него все маршруты.
Вопрос в том, какова была бы лучшая архитектура для этого?
Когда речь заходит о выборе слоя, где я буду размещать свой код, я рассматривал, в частности:
-
Определения загрузочных фабрик в методе Extension
load
и создание всех контроллеров там. Проблема: маршрутизатор там недоступен, потому что это происходит до создания контейнера, поэтому я не мог создавать маршруты в одном и том же месте. -
Sooo... может быть, в компиляторе? Но пропуск компилятора не имеет доступа к конфигурации... Я имею в виду... на самом деле он имеет, если я просто загружу конфигурацию и обработаю ее вручную, но я все еще не уверен, что это хорошее место, но я Сейчас он склоняется к этому решению.
Когда дело доходит до создания маршрутов:
-
Должен ли я помещать логику создания маршрута в контроллер factory? Но я создаю контроллеры как службы, а factory не имеет доступа к serviceId созданного контроллера, а serviceId требуется для создания маршрута, поэтому нет.
-
В самом контроллере? Я имею в виду, как работают маршруты аннотаций, поэтому это может быть жизнеспособным. Контроллер должен будет реализовать что-то вроде моего собственного
ControllerInterface
с помощью методаgetRoutes
, а для внешнего сеанса службы/компилятора необходимо сначала создать контроллер как услугу, а затем получить маршруты от указанного контроллера, изменить их, они будут ссылаться на этот контроллер serviceId и добавлять их к маршрутизатору... независимо от того, насколько беспорядочно это выглядит. -
Есть ли другой вариант?
Существует значительный недостаток информации об этом конкретном шаблоне - factory контроллеров:).