Настройка нескольких областей с контроллерами в каждой области, наследующими от базового контроллера - MVC - PullRequest
0 голосов
/ 19 июня 2011

В настоящее время я работаю над небольшим проектом MVC 2, и количество контроллеров, которые у нас есть со связанными представлениями и моделями представления, становится довольно большим.Чтобы попытаться немного отделить друг от друга, я рассмотрел использование функции областей MVC 2 и соответствующим образом рефакторинг проекта.

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

По сути, в настоящее время у нас есть такая настройка в папке основных контроллеров:

Controller (MVC)
+-- BaseController (Abstract)
      +-- BaseWorkController (Abstract)
          +-- BaseWorkAController (Abstract)
              +-- ... a number of controllers exposing actions
          +-- BaseWorkBControllers (Abstract)
              +-- ... a number of controllers exposing actions

Я подумываю создать Области для каждого рабочего контроллера, т. Е.

  • Площадь / РабочаяA
  • Область / Рабочая область

Каждая область будет иметь свою связаннуювиды и модели представления и даже модели.

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

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

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

1 Ответ

2 голосов
/ 19 июня 2011

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

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

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

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