Плюралізація іменування контролера 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.