Pluralizacja nazewnictwa kontrolera ASP.NET MVC

86

Konwencje RESTful wskazują na używanie rzeczowników w liczbie mnogiej zamiast pojedynczych obiektów.

Jaka jest konwencja liczby mnogiej nazywania kontrolerów ASP.NET MVC, tj.
ProductControllerLub ProductsController?

Petrus Theron
źródło
4
Myślę, że nie powinny być one utworzone w liczbie mnogiej, sądząc po domyślnych, które są dostarczane z samouczkami MVC w ASP.net.
user1477388
1
Na przykład domyślny interfejs API sieci Web ASP.NET ma mieszankę nazw pojedynczej (HomeController, AccountController) i liczby mnogiej (ValuesController).
Sergio Vicente

Odpowiedzi:

45

Niektóre struktury MVC używają liczby mnogiej, jednak szablony projektów MVC zawierają kontroler o nazwie AccountController, co sugeruje pojedyncze nazewnictwo.

To nie ma znaczenia. Podobnie jak w przypadku większości rzeczy we frameworku Asp.net MVC, wybór należy do Ciebie. Nie ma prawdziwych konwencji.

To moja osobista opinia, ale ważne jest, aby wybrać schemat i być konsekwentnym!

Cybermaxs
źródło
3
Kciuki w górę za nacisk na spójność.
pim
3
Powiedziałbym, że w rzeczywistości jest to poprawna odpowiedź: stackoverflow.com/a/31968960/2013803 (ma więcej głosów, ale nie został oznaczony jako „odpowiedź). AccountController jest dla konta bieżącego użytkownika; używanie liczba mnoga byłaby bardzo dziwna, gdyby nie zarządzanie wieloma użytkownikami w panelu administratora; ale to jest inny przypadek użycia i powinien (IMHO) być innym kontrolerem. Jest też tylko jedna strona główna dla HomeController. Więc ... nie , spójność powinna dotyczyć zrozumienia, co robi kontroler i nadania mu odpowiedniej nazwy na tej podstawie.
Jashan
162

Będę musiał nie zgodzić się z poprzednimi odpowiedziami dotyczącymi używania liczby pojedynczej lub mnogiej i bycia konsekwentnym. Każdy kontroler powinien stosować inną konwencję w zależności od tego, czy współdziała z jedną, czy z wieloma jednostkami. Zwłaszcza, że ​​nazwa kontrolera jest używana domyślnie w adresie URL.

Podczas gdy szablony projektów używają liczby pojedynczej (HomeController, AccountController), istnieje tylko jedna strona główna, a akcje konta działają tylko na jednym koncie w sesji. Nie spodziewałbym się, że adresy URL / homes będą uzyskiwać dostęp do strony głównej, ani nie spodziewałbym się przejść do / accounts w celu zarządzania ustawieniami konta.

Mnoga HomesController będzie działać na stronie nieruchomości, który miał metod odnoszących się do podawania i przeszukiwania wielu domów: / Home / New-aukcji.

Głośny
źródło
3
Zgoda - na przykład UsersControllerma sens, jeśli projektujesz swoje trasy, takie jak /api/users(wszyscy użytkownicy) i /api/users/{userId}(jeden użytkownik)
Levi Fuller
2
Nie /api/user/{userId}miałoby to jednak większego sensu, ale można by argumentować, że nawet w przypadku pracy z wieloma użytkownikami, kontroler odzwierciedla typ jednostki, a więc HomeControllerporadzi sobie z jednostkami typu Home, stąd /Home/{homeId}i/Home/All-Homes/
NibblyPig
Zgadzam się z tym wyjaśnieniem.
Hailee
13

Gdy dodajesz kontroler przy użyciu szkieletu MVC dla jednostki Entity Framework, VS2013 tworzy liczbę mnogą nazwę kontrolera, więc sugerowałbym użycie tej wartości domyślnej, która sprawia, że ​​kontrolery dla jednostek są liczbą mnogą.

UPDATE: Zmieniłem zdanie. LouD ma rację. To zależy od kontekstu kontrolera.

RitchieD
źródło