Czy nazwy paczek powinny być w liczbie pojedynczej czy mnogiej?

226

Często, szczególnie w bibliotekach, pakiety zawierają klasy zorganizowane wokół jednej koncepcji. Przykłady: xml, sql, user, config, db . Myślę, że wszyscy czujemy się całkiem naturalnie, że te pakiety są poprawne w liczbie pojedynczej .

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. user .User
com.myproject. użytkownik .UserFactory

Jeśli jednak mam pakiet, który zawiera zbiór implementacji jednego typu - takich jak zadania, reguły, moduły obsługi, modele itp. , Co jest lepsze?

com.myproject. zadania .TakeOutGarbageTask
com.myproject. zadania .DoTheDishesTask
com.myproject. zadania .PaintTheHouseTask

lub

com.myproject. zadanie .TakeOutGarbageTask
com.myproject. zadanie .DoTheDishesTask
com.myproject. zadanie .PaintTheHouseTask

Nicole
źródło
5
liczba pojedyncza, podobnie jak nazwy tabel bazy danych, powinna zawsze być pojedyncza, ale z różnych powodów. Spójrz na dowolną popularną standardową bibliotekę, na przykład Java lub Python.
@Jarrod Roberson: Prześlij swoją odpowiedź jako odpowiedź, abyśmy mogli ją poprawnie głosować.
S.Lott
@Jarrod będzie potrzebował kilku przykładów, ponieważ w bibliotekach standardowych większość klas należy do pierwszej kategorii I na liście.
Nicole
@Reneesis Rzuć okiem na moją zaktualizowaną odpowiedź.
Matthew Rodatus
@Matthew - podoba mi się. Wyraziłeś to, co podejrzewałem, ale nie byłeś pewien, jak skodyfikować.
Nicole

Odpowiedzi:

291

Liczba mnoga służy do opakowań o jednorodnej zawartości, a liczba pojedyncza do opakowań o niejednorodnej zawartości.

Klasa jest podobna do relacji z bazą danych. Relację bazy danych należy nazwać liczbą pojedynczą, ponieważ jej rekordy są uważane za instancje relacji. Funkcja relacji polega na utworzeniu złożonego rekordu z prostych danych.

Z drugiej strony pakiet nie jest abstrakcją danych. Pomaga w organizacji kodu i rozwiązywaniu konfliktów nazw. Jeśli pakiet jest wymieniony w liczbie pojedynczej, nie oznacza to, że każdy element pakietu jest instancją pakietu; zawiera powiązane, ale niejednorodne pojęcia. Jeśli jest wymieniony w liczbie mnogiej (jak często ) Spodziewam się, że opakowanie zawiera jednorodne koncepcje.

Na przykład typ powinien zostać nazwany TaskCollectionzamiast TasksCollection, ponieważ jest to zbiór zawierający instancje a Task. Nazwany pakiet com.myproject.tasknie oznacza, że ​​każda zawarta klasa jest instancją zadania. Nie może być TaskHandler, A TaskFactoryitd pakiet o nazwie com.myproject.tasksjednak będzie zawierać różne typy, które są wszystkie zadania: TakeOutGarbageTask, DoTheDishesTask, itd.

Matthew Rodatus
źródło
13
Podobne pytanie można znaleźć na stronie polish.stackexchange.com/q/25713 . Kategoria jest analogiczna do liczby pojedynczej, a typ jest analogiczna do mnogiej.
Matthew Rodatus
4
Sam link, który podałeś, pokazuje wyjątek od tej reguły. beansjest liczbą mnogą, jednak java.beanszawiera wszelkiego rodzaju klasy związane z JavaBeans.
SkyDan
Dobra odpowiedź, ale nie zgadzam się z logiką relacji z bazą danych. Relacje w ERD są osobliwe, ponieważ pokazują relacje między jednostkami. Tabele są fizyczną implementacją relacji i zawierają wiele wierszy, a zatem powinny być w liczbie mnogiej IMO. Odpowiedź na „co jest w tej tabeli?” to „użytkownicy”, a nie „użytkownik”. To prawda, że ​​wydaje się, że pojedyncze nazwy są bardziej popularne w świecie korporacyjnym (C #, Java) niż w społecznościach takich jak Ruby, Python, JavaScript i PHP.
ryeguy
4
Komentarz SkyDan wskazuje na coś bardzo ważnego, co zostało tutaj całkowicie pominięte. Wydaje mi się, że nazywanie liczby mnogiej „java.beans” było w rzeczywistości błędem i zamiast tego powinno być nazwane „java.bean”, liczba pojedyncza.
Vicky Chijwani
6
@VickyChijwani @SkyDan, ponieważ JavaBeans ™ jest znakiem towarowym, prawdopodobnie chcieli zachować nazwę bez zmian, aby odwoływać się do samej technologii, a zatem używali java.beans.
Hejazi
1

To prawdopodobnie zależy od konkretnego języka. W .NET (C #) zdecydowanie powinna być liczba mnoga, jeśli prawdopodobne jest kolizja nazwy typu przestrzeni nazw ( type name expected but namespace foundbłąd). Poradziłem sobie z tym, nie jest to przyjemne i powoduje, że w całym kodzie występują zbyt wysokie nazwy typów. Przykład .

Legowisko
źródło