Плюралізація іменування контролера ASP.NET MVC


86

Конвенції RESTful вказують на використання іменників множини над одиничними об’єктами.

Що таке принцип плюралізації для іменування контролерів ASP.NET MVC, тобто
ProductControllerабо ProductsController?


4
Я не думаю, що вони повинні бути плюралізованими, судячи з тих за замовчуванням, які додаються до підручників MVC на ASP.net.
user1477388

1
Наприклад, веб-API ASP.NET за замовчуванням має поєднання однини (HomeController, AccountController) та множини імен (ValuesController).
Серхіо Вісенте

Відповіді:


45

Деякі MVC Frameworks використовують множину, однак шаблони проектів MVC містять контролер, який називається AccountController, таким чином пропонуючи одиничне іменування.

Це не має значення. Як і у більшості речей в рамках Asp.net MVC, вибір за вами. Справжніх умовностей немає.

Це моя особиста думка, але важливо те, що ви обираєте схему та дотримуєтеся послідовності!


3
Великі пальці вгору, щоб наголосити на послідовності.
пім

3
Я б сказав, що насправді це правильна відповідь: stackoverflow.com/a/31968960/2013803 (він має більше голосів, але не був позначений як "відповідь"). AccountController призначений для облікового запису поточного користувача; множина буде дуже дивною, якщо вона не існує для керування кількома користувачами на інформаційній панелі адміністратора; але це інший варіант використання, і це має бути (IMHO) іншим контролером. А також є лише один дім для HomeController. Отже ... ні , узгодженість повинна полягати у розумінні того, що робить контролер, і присвоєнні йому відповідної назви на основі цього.
Джашан,

162

Мені доведеться не погодитись із попередніми відповідями щодо використання множини чи однини та послідовності. Кожен контролер повинен використовувати іншу конвенцію залежно від того, взаємодіють вони з окремими чи кількома сутностями. Тим більше, що ім'я контролера використовується за замовчуванням в URL-адресі.

Хоча в шаблонах проектів використовується однина (HomeController, AccountController), є лише одна Домашня сторінка, і дії Облікового запису діють лише на одному обліковому записі сеансу. Я не очікував, що URL-адреси / будинків отримають доступ до домашньої сторінки, а також не хотів би переходити до / акаунтів для управління налаштуваннями свого облікового запису.

Багаточисельний HomesController працював би на веб-сайті нерухомості, який мав методи, пов’язані з переліком та пошуком кількох будинків: / homes / new-listings.


3
Погоджено - Наприклад, a UsersControllerмає сенс, якщо ви розробляєте свої маршрути, такі як /api/users(усі користувачі) та /api/users/{userId}(одинарний користувач)
Леві Фуллер

2
/api/user/{userId}Хоча це не мало б такого ж сенсу, ви могли б стверджувати, що навіть у випадку спілкування з кількома користувачами, ваш контролер відображає тип сутності, таким чином HomeControllerбуде мати справу з сутностями типу Home, отже /Home/{homeId}і/Home/All-Homes/
NibblyPig

Я згоден з цим поясненням.
Хейлі,

13

Коли ви додаєте контролер за допомогою лісів MVC для сутності Entity Framework, VS2013 робить ім'я контролера множинним, тому я б запропонував використовувати той за замовчуванням, який робить контролери для сутностей множинним.

ОНОВЛЕННЯ: Я передумав. ГРОМКО правильно. Це залежить від контексту контролера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.