Имена пакетов в Java в единственном или множественном числе?
Ситуация следующая:
Всё время делал названия для пакетов в единственном числе, но недавно у друга в коде заметил все названия в множественном. Например: у меня - dto, controller, model..., у него - dtos, controllers, models...
Стало интересно. Вроде как раньше не задумывался, писал на автомате. Пересмотрел свои исходники, единственный множественный вариант именования - utils, всё остальное в единственном числе.
Есть ли какие-то code conventions или best practices в отношении числительного в названии пакета?
Если общих правил не существует, чем следует руководствоваться?
P.S. поиск выдаёт, что многие выбирают совершенно случайно и допускают оба варианта, но какая-то же логика должна быть. Поэтому хочу поднять этот вопрос.
Ответы (3 шт):
Называйте во множественном числе пакеты с однородным контентом, и в единственном числе — пакеты с разнородным контентом.
Класс имеет сходство с таблицой в базе данных. Таблицу в базе называют в единственном числе, так как записи в таблице являются экземплярами сущности, которая описывается этой таблицей.
Что касается пакетов, то пакет — это не абстракция над данными. Пакет нужен для организации кода и разрешения конфликтов имен. Если пакет назван в единственном числе, то это не значит что каждый элемент внутри пакета является экземпляром данного пакета: он содержит связанные, но разнородные сущности. Если пакет назван во множественном числе, то ожидается, что он будет содержать однородные сущности.
Например, типы следует называть TaskCollection, а не TasksCollection, так как это коллекция, которая содержит Task. Но если пакет назван com.myproject.task, то это не означает что каждый класс в этом пакете является экзепляром Task. Там может лежать TaskHandler, TaskFactory и т. д. Но пакет с именем com.myproject.tasks будет содержать различные типы тасков: TakeOutGarbageTask, DoTheDishesTask, и т. д.
Пишу на c#, в нем не пакеты, а пространства имен и проекты, но суть одна и та же) С основным ответом, полностью согласен, если что-то однородное, зову во множественном числе (Models, Controllers), а если нет, обычно в единственном. Единственное, что у меня выпадает из этого правила - DTO, т.к. это уже акроним и не вижу смысла добавлять к нему еще S для множественного числа.
К перечисленным выше ответам хочу добавить.
Поиск по style guides не даёт результатов, так как этот момент не регламентируется. Вот к примеру от google и oracle рекомендации по названиям пакетов:
Поэтому я стал спрашивать в крупных чатах разработчиков java. Большинство особо не задумываются и пишут названия пакетов в единственном числе. Хотя с ответами выше они тоже согласились. В общем, на практике получается единой позиции нет и нужно придерживаться стандартов принятых в вашей компании или в конкретном проекте.