Как бороться с действительно большими контролерами. , - PullRequest
1 голос
/ 29 ноября 2008

У меня есть приложение winforms, которое было создано с использованием MVC. Контроллер подписывается на все события из представления (нажатия кнопок и т. Д.) И связывает несколько представлений с моделью.

Проблема в том, что контроллер теперь содержит около 3000 строк кода (сложного для модульного тестирования).

Как лучше всего избегать того, чтобы контроллеры делали все и становились такими большими?

Ответы [ 3 ]

4 голосов
/ 29 ноября 2008

Можно отметить одну очевидную вещь: один контроллер не обязательно должен быть реализован как один класс. Шаблон проектирования MVC просто утверждает, что M, V и C являются отдельными компонентами, но не то, что каждый должен быть одним и только одним классом.

3 голосов
/ 29 ноября 2008

субконтроллер

Контроллер может быть разделен на различные суб -контроллеры без нарушения шаблона MVC.

В 3k строках наверняка где-то нарушено сцепление. Попробуйте сгруппировать одно и то же поведение и создать новый контроллер. Таким образом, у вас будет «основной» контроллер, который будет вызывать «вспомогательный» контроллер.

Метод без подпрограммы:

По своему опыту, у меня нет 1 контроллера для всего приложения WinForm. Как я создал это, у меня есть несколько модулей, которые загружаются из меню. Когда эти модули загружены (Form-> View), он поставляется со своим собственным контроллером. Таким образом, у меня есть только 1 контроллер для каждого модуля. Эти контроллеры обычно содержат не более 500 строк кода.

0 голосов
/ 29 ноября 2008

Зависит от ситуации, но при условии, что вы не находитесь в точке, где должен быть создан новый контроллер, есть несколько подходов.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...