Назви класів: однини чи множини? [зачинено]


58

Мені завжди важко обирати форми однини та множини для назв класів:

CustomerRepository vs. CustomersRepository
CustomerService vs. CustomersService
CustomerController vs. CustomersController

А для складених імен це ще складніше:

OrderCustomerRepository vs. OrderCustomersRepository vs. OrdersCustomersRepository

Який підхід ви віддаєте перевагу і чому?


Чи містив би клас сховище для кількох клієнтів? Якщо це одне сховище для одного клієнта ...
JeffO

2
@Jeff O, сховище може одночасно містити методи GetCustomerById і GetCustomers
SiberianGuy

2
У моделюванні даних ім’я таблиці має бути єдиним. Якщо у вашій програмі використовуються доменні класи, які відповідають 1-1 вашій моделі даних, то може бути хорошою ідеєю зберегти назву єдиним. Звичайно, відображення класів до таблиць у форматі 1-1 може бути не найкращим способом побудови вашої об'єктної моделі для додатка ОО, але це поруч із питанням.
NoChance

Відповіді:


73

Єдине, що я плюралізую, - це колекції.

foreach (var customer in customers)
{
    // do something with customer
}

Усі ваші приклади - це окремі об'єкти, тому вони не множинні. Так, імена відносяться до об'єктів, які можуть мати кілька примірників, але все, що потрібно знати в імені, - це об'єкт об'єкта (тобто замовник).

Тож у всіх ваших прикладах однина є правильною формою. Значно полегшує життя.


2
Я б використовував customerCollectionдля колекцій, але в іншому я згоден. Це найкраща практика в розробці баз даних і працює також непогано в коді.
Jan_V

12
Мені тут не подобаються слова типу "Колекція". Англійська мова має ідеально хороший спосіб посилатися на колекцію речей, використовуючи множину.
Гурт Робота

Замість того , щоб Collectionяк щодо Iterator?
Джуліан

@Julian An Iteratorбув би якось спільним рутином, а не структурою даних для розміщення декількох об'єктів, правда?
Вілсон

64

Використовуйте однину. Інструмент, з яким можна повернути гвинти, називається "викруткою", а не "драйвером гвинтів".

Однак, відповідно, плюралізуйте свій метод та назви властивостей, щоб вказати, чи буде повернуто одне значення чи колекція їх.


7

Однозначно однини. Ви не створюєте об'єкт People, ви створюєте колекцію Personоб'єктів. Єдиний раз, коли я використовував би множини, був би для статичних класів, тобто SupportServices, StringUtilsтощо. Однак у цьому випадку клас виступає швидше як простір імен, ніж будь-що інше.


1
І подумати, я весь цей час використовував колекції Народів!
Йорданія

2
Список <person> людей ... мені здається нормальним, @Jordan.
StevenV

1

Пам'ятайте, клас - це шаблон для об'єкта. Тож подумайте про об’єкт, про який ви звертаєтесь.

Часто це особлива сутність, особливо коли це сутність ORM. Іноді це могла бути колекція.

Я вважаю, що відповідь є специфічним для контексту.

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