Соглашения об именах - одно правило для контроллеров, никаких правил для моделей и представлений - PullRequest
6 голосов
/ 17 апреля 2009

В ASP.NET MVC контроллеры существуют в папке с именем Controllers. Их имена должны заканчиваться Controller, иначе все просто не работает (вы получаете ошибку HTTP 404).

Однако имена моделей не должны заканчиваться Model, а имена представлений не должны заканчиваться View.

Это кажется противоречивым ... почему (с точки зрения MVC или дизайна) имена контроллеров должны заканчиваться Controller?

Есть ли в других средах MVC это требование?

Редактировать

Так как это, кажется, соглашение, я не защищаю идти против него (см. Соглашение по конфигурации !), Но я хочу понять причины этого.

Ответы [ 2 ]

8 голосов
/ 18 апреля 2009

Соглашение о контроллере таково, что маршрутизация может легко найти контроллер без дополнительной настройки. Добавление требуемого окончания контроллера снижает вероятность случайного показа объекта через маршрутизацию MVC.

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

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

При этом я видел, что большинство людей строят свои модели точно так же, как они строили свои сущности или модель предметной области до MVC. Если вы используете активный шаблон записи, назовите модели, соответствующие таблицам, на которые они отображаются; если вы больше фокусируетесь на домене, то назовите модели, соответствующие той части домена, которую они моделируют. Кроме того, я видел все больше и больше людей, создающих набор моделей представлений, которые просто используются для представления данных в пользовательском интерфейсе и создаются путем извлечения деталей из различных моделей в вашем домене. Модели, безусловно, являются наименее самоуверенной частью ASP.NET MVC, но это хорошая вещь, потому что люди предпочитают работать в этой области по-разному.

2 голосов
/ 17 апреля 2009

Это просто соглашение, а не требование! Вы можете изменить это поведение, настроив DefaultControllerFactory или создав собственную фабрику контроллеров.

см. здесь для получения дополнительной информации. Также есть несколько примеров в проекте MvcContrib, которые внедряют контроллер из движка Dependency Injection. проверить это здесь .

...