2010-03-12 2 views
0

Я читал о «Fat Controllers», но большинство статей сосредоточено на выводе логики уровня сервиса/репозитория из контроллера. Однако я столкнулся с другой ситуацией, и мне интересно, есть ли у кого-нибудь идеи для улучшения.Fat ASP.NET MVC-контроллеры

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

Чтобы получить более подробную информацию, этот контроллер используется на вкладке. Каждая вкладка представляет часть данных для редактирования, и все используемые здесь объекты модели домена относятся к одному и тому же агрегату.

Любые советы?

Приветствия, Мош

ответ

0

Для всех вкладок вы можете использовать одно действие, которые имеют параметр вкладки, которые указывают на то, что данные, которые вы должны вернуться.

Задача контроллера заключается в том, чтобы наложить эту вкладку string в переменную типа enum. Затем вкладка будет отправлена ​​в репозиторий, а задание репозитория - вернуть данные в ответ на значение табуляции.

Контроллер должен выполнить свою работу с помощью сервисов: Input Validator and Mapper.

Задача службы картографирования состоит в том, чтобы отображать пользовательский ввод (обычно строки) в фактическое типизированное значение (int, System.DateTime, перечисляемые типы и т. Д.).

Задача валидатора - проверить правильность ввода.

Следуя этим принципам, вы должны держать свои контроллеры действительно крошечными.

+0

Это не так тихо, поскольку каждая вкладка дает пользователю разные результаты. Поэтому, если я объединить все действия ViewXXXTab в 1, тогда у меня будет метод с множеством операторов условий, чтобы решить, какой метод вызывать для извлечения данных. Например: переключатель (вкладка) { case A: Call SomeObject.SomeMethod(); кейс B: Call AnotherObject.AnotherMethod(); кейс C: ... ... } – Mosh

0

Если вам нужно что-то простое и легкое, я предлагаю просто разделить контроллер на частичные классы на основе вкладок. Конечно, он все еще является регулятором жира, есть только некоторое очевидное разделение между различными функциональными возможностями вкладки.