#design-patterns #cqrs
Вопрос:
Я создаю небольшой трекер проблем с помощью ASP Core MVC, чтобы через некоторое время вернуться к скорости работы без кода. Мое приложение началось с архитектуры onion, но я обнаружил, что погружаюсь в CQR и фрагменты функций, медленно перенося некоторые функции в этот стиль. Я не использую источник событий, и у меня нет таблиц, предназначенных для чтения.
Мой вопрос касается запросов, связанных с командами, в частности с моими командами CreateProject/EditProject. Сами команды просты, у них просто есть имя, описание и некоторые идентификаторы для отношений, двумя из которых являются PrioritySchemeId и PermissionSchemeId. Никаких проблем там нет.
Где я застрял, так это в начальных запросах для страниц создания/редактирования. Эти страницы, конечно же, состоят из двух частей: начальной страницы для отображения страницы и ПУБЛИКАЦИИ для выполнения действия.
Давайте возьмем пример EditProject. Каждый пример, который я видел в Интернете, показывает простую сущность без отношений. Для первой части, GET, они просто вызывают запрос типа «GetProjectQuery», сопоставляют этот результат с моделью представления (или используют его в качестве модели представления), а затем показывают страницу. Когда эта страница публикует ответ, они моделируют привязку к команде Editproject и запускают ее. Конец истории.
Моя проблема в том, что мне нужны выпадающие списки на моей странице. Мне нужен список всех доступных схем приоритетов и схем разрешений, из которых пользователь может выбирать, поэтому такой запрос, как GetProjectQuery, не годится, так как он не будет содержать эти данные.
Я мог бы вызвать запрос типа GetPermissionSchemesQuery в своем контроллере, где я создаю модель представления, но это напоминает мне о методах обслуживания, и в схеме разрешений гораздо больше данных, чем мне нужно, мне просто нужны идентификаторы и имена для списка выбора.
Я думаю создать запрос специально для этой страницы, запрос geteditproject. Этот запрос загрузит все данные, необходимые для первоначального отображения страницы. Это в основном оставит меня с парой запрос/команда: GetEditProjectQuery и EditProjectCommand. Затем я бы сделал то же самое для GetCreateProjectQuery/CreateProjectCommand.
Является ли это правильным подходом? Я чего-то не понимаю? В долгосрочной перспективе у меня, вероятно, будет много таких пар для разных функций, и я не уверен, что это правильный путь. Мне кажется, что это лучший способ, но я не могу найти ни одного примера, чтобы кто-то еще делал это.
Комментарии:
1. Почему бы не сделать несколько запросов для создания страницы редактирования? У вас есть отдельные запросы для каждого выпадающего списка?