Имена пакетов в Java в единственном или множественном числе?

Ситуация следующая:

Всё время делал названия для пакетов в единственном числе, но недавно у друга в коде заметил все названия в множественном. Например: у меня - dto, controller, model..., у него - dtos, controllers, models...

Стало интересно. Вроде как раньше не задумывался, писал на автомате. Пересмотрел свои исходники, единственный множественный вариант именования - utils, всё остальное в единственном числе.

Есть ли какие-то code conventions или best practices в отношении числительного в названии пакета?

Если общих правил не существует, чем следует руководствоваться?

P.S. поиск выдаёт, что многие выбирают совершенно случайно и допускают оба варианта, но какая-то же логика должна быть. Поэтому хочу поднять этот вопрос.


Ответы (3 шт):

Автор решения: Vadik

Называйте во множественном числе пакеты с однородным контентом, и в единственном числе — пакеты с разнородным контентом.

Класс имеет сходство с таблицой в базе данных. Таблицу в базе называют в единственном числе, так как записи в таблице являются экземплярами сущности, которая описывается этой таблицей.

Что касается пакетов, то пакет — это не абстракция над данными. Пакет нужен для организации кода и разрешения конфликтов имен. Если пакет назван в единственном числе, то это не значит что каждый элемент внутри пакета является экземпляром данного пакета: он содержит связанные, но разнородные сущности. Если пакет назван во множественном числе, то ожидается, что он будет содержать однородные сущности.

Например, типы следует называть TaskCollection, а не TasksCollection, так как это коллекция, которая содержит Task. Но если пакет назван com.myproject.task, то это не означает что каждый класс в этом пакете является экзепляром Task. Там может лежать TaskHandler, TaskFactory и т. д. Но пакет с именем com.myproject.tasks будет содержать различные типы тасков: TakeOutGarbageTask, DoTheDishesTask, и т. д.

https://softwareengineering.stackexchange.com/a/75929

→ Ссылка
Автор решения: Zadir7

Пишу на c#, в нем не пакеты, а пространства имен и проекты, но суть одна и та же) С основным ответом, полностью согласен, если что-то однородное, зову во множественном числе (Models, Controllers), а если нет, обычно в единственном. Единственное, что у меня выпадает из этого правила - DTO, т.к. это уже акроним и не вижу смысла добавлять к нему еще S для множественного числа.

→ Ссылка
Автор решения: Sergey Zh.

К перечисленным выше ответам хочу добавить.

Поиск по style guides не даёт результатов, так как этот момент не регламентируется. Вот к примеру от google и oracle рекомендации по названиям пакетов:

Google Java Style Guide

Oracle Java Documentation

Поэтому я стал спрашивать в крупных чатах разработчиков java. Большинство особо не задумываются и пишут названия пакетов в единственном числе. Хотя с ответами выше они тоже согласились. В общем, на практике получается единой позиции нет и нужно придерживаться стандартов принятых в вашей компании или в конкретном проекте.

→ Ссылка