Сохранение контроллера тонким (слишком много методов действия) - PullRequest
22 голосов
/ 28 сентября 2010

Я работаю над своим первым настоящим проектом ASP.NET MVC, и я заметил, что контроллер, в котором я работал, становится довольно большим.Это, по-видимому, идет вразрез с лучшей практикой поддержания тонкости ваших контроллеров.

Я хорошо поработал, не допуская бизнес-логику в контроллеры.Я использую отдельный слой для этого.Каждое действие в первую очередь вызывает метод на бизнес-уровне и координирует конечный результат в зависимости от того, допустимо ли состояние модели.

При этом контроллер имеет большое количество методов действия.Интуитивно я хотел бы разбить контроллер на подконтроллеры, но я не вижу простого способа сделать это.Я мог бы просто разбить контроллер на отдельные контроллеры, но я теряю иерархию, и она выглядит немного грязной.

Нужно ли рефакторинг контроллера с большим количеством тонких действий?Если это так, каков наилучший способ сделать это?

Ответы [ 3 ]

17 голосов
/ 28 сентября 2010

Во-первых, когда вы слышите, что хорошо сводить код контроллера к минимуму, это в основном относится к поддержанию каждого метода действия как можно более тонким (вместо этого используйте логику в бизнес-классах, , а не в представлениях и моделях представленияКажется, вы делаете это, и это здорово.

Что касается "слишком многих" методов действия, то это вызов суждения.Это может быть признаком хорошей организации, когда каждое действие сосредоточено на одной вещи.Кроме того, может быть, вы используете действия специально для использования с RenderAction?И это может быть просто характер вашего решения, что есть много вещей, которые нужно сделать, связанных с темой вашего контроллера.

Итак, я думаю, что вы, вероятно, в порядке.Однако, чтобы убедиться, что на бумаге для заметок разбейте контроллер на 2 или 3 контроллера и нарисуйте, как ваши истории будут работать при переходе от действия к действию.И если вы обнаружите, что ваш рабочий процесс работает с большим количеством контроллеров, вы должны его отключить.Особенно, если вы собираетесь добавить эту функцию позже.Чем раньше вы сломаете это, тем лучше.

3 голосов
/ 28 сентября 2010

Хороший вопрос.

Я полагаю, что «тонкий» контроллер может все еще быть «широким» или «высоким» в зависимости от того, как вы хотите растянуть аналогию.Если не существует чистого способа разбить контроллер, который должен делать много вещей, я не думаю, что это проблема, если каждое действие сосредоточено исключительно на подготовке Views / ViewModels и имеет ограниченный размер кода.

2 голосов
/ 28 сентября 2010

Другой структурный вариант, который у вас есть, - это введение частичных классов для логических группировок действий.И используя что-то вроде vscommands, чтобы сгруппировать файлы вместе.

Я сомневаюсь, что кто-нибудь может придумать магическое количество действий, которые сообщают вам, когда есть хорошая идея разбить материал и представить новые контроллеры, это действительно зависитваш домен.

...