#asp.net-mvc #onion-architecture
#asp.net-mvc #onion-архитектура
Вопрос:
Это вопрос уровня архитектуры. На моем рабочем месте контроллеры привязаны к наличию только одной службы приложений для вызова кода уровня приложения. Однако из моего изучения архитектуры onion и asp.net mvc, мне кажется вероятным, что asp.net контроллеру mvc может потребоваться вызвать несколько служб приложений из уровня служб приложений приложения и, следовательно, он будет зависеть от многих служб приложений (а не только от одной). Я прав, думая об этом?
Вторая часть:
Как обычно проектируются контроллеры? Я не большой поклонник монолитного контроллера, и я знаю, что представление потенциально может выполнять вызовы нескольким контроллерам. Для меня контроллер — это просто способ логически сгруппировать действия, которые являются основной частью, в которой происходит обработка запросов.
Сказав это, что бы asp.net эксперты mvc и эксперты по архитектуре onion предлагают. Есть ли у нас контроллер для каждого представления (приводит к монолитному контроллеру) или у нас есть контроллер для каждой службы приложений.
или
как я чувствую, так и должно быть :
-
контроллеры предназначены только для логических групп действий. Это означало бы, что представление может вызывать несколько контроллеров, а контроллер может вызываться несколькими представлениями.
-
Контроллер может использовать несколько служб приложений. Хотя много раз я видел, что методы действий в значительной степени соответствуют методу, который вызывается на уровне служб приложений. Но это не должно быть мотивацией для разработки одного контроллера для каждой службы приложений.
Ищу хорошие идеи или мнения. Спасибо!
Комментарии:
1. Наличие строго одной службы, используемой контроллером, для меня является скорее шаблоном фасада. Это может быть полезно в некоторых сценариях, но не является строгим требованием. Чаще всего у вас действительно будет несколько служб. Ограничение одним, вероятно, приведет к вопиющим нарушениям принципа единой ответственности. Я согласен с вашими пронумерованными пунктами. Интерфейс должен быть свободен для разделения любых рабочих процессов, как он считает нужным.
2. «Наличие строго одной службы, которую использует контроллер, для меня является скорее шаблоном фасада» — вы имеете в виду, что эта единственная служба обычно предназначена для того, чтобы быть фасадом над несколькими службами, к которым может обращаться контроллер. В этом случае не имеет смысла, чтобы контроллер объявлял эти зависимости в явном виде, а не добавлял фасад и абстрагировал зависимость.