ASP.Net MVC 2 Файловая организация;Представления и контроллеры - PullRequest
1 голос
/ 19 января 2010

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

Вот пример того, как это изложено в соответствии с соглашением MVC.

UIProject
- Controllers
  - HomeController.cs
  - ErrorController.cs
  - PersonalInfoController.cs
  - BaseController.cs
  ...
- Views
  - Home
    - Index.aspx
    - Home1.aspx
    - Home2.aspx
  - PersonalInfo
    - Step1.aspx
    - Step2.aspx
    - Step3.aspx
    ...
  - Shared
    Site.Master
    Error.aspx
    ...

Тем не менее, мы поняли, что функциональность PersonalInfo выросла и действительно должна быть разбита на несколько контроллеров. Мы хотели бы организовать их в подпапке папки Controllers. Как то так:

Controllers
  - HomeController.cs
  - ErrorController.cs
  - BaseController.cs
  - PersonalInfo
    - Step1Controller.cs
    - Step2Controller.cs
    - Step3Controller.cs

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

Реальная проблема заключается в том, чтобы заставить MVC найти связанный вид. Я нашел два способа обойти это. Один из них, clanmonroe.com , обрабатывает это, наследуя от базового контроллера, который указывает жестко закодированный путь просмотра. Другой, Стивен Вальтер , более просто предлагает указать путь к представлению при вызове к представлению.

Оба эти метода, похоже, работают, и я более неравнодушен к первому. Однако у них есть недостатки. Главным образом то, что мы сейчас больше не навязываем конвенцию. То есть Step1Controller.cs может иметь действие Index, но представление может называться foo.aspx.

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

1 Ответ

2 голосов
/ 19 января 2010

Это звучит (более или менее) как функция новых областей в ASP.NET MVC. Согласно ScottGu :

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

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

...