Должны ли имена пакетов быть единственными или множественными?

227

Часто, особенно в библиотеках, пакеты содержат классы, которые организованы вокруг единой концепции. Примеры: xml, sql, user, config, db . Я думаю, что мы все вполне естественно чувствуем, что эти пакеты правильны в единственном числе .

com.myproject. xml. Элемент
com.myproject. SQL .Connection
com.myproject. пользователь .User
com.myproject. пользователь .UserFactory

Однако, если у меня есть пакет, который на самом деле содержит коллекцию реализаций одного типа - таких как задачи, правила, обработчики, модели и т. Д. , Что предпочтительнее?

com.myproject. Задачи .TakeOutGarbageTask
com.myproject. Задачи .DoTheDishesTask
com.myproject. задачи .PaintTheHouseTask

или же

com.myproject. задача .TakeOutGarbageTask
com.myproject. Задача .DoTheDishesTask
com.myproject. задача .PaintTheHouseTask

Николь
источник
5
единственное число, как и имена таблиц базы данных, всегда должно быть единичным, но по разным причинам. Посмотрите на любую популярную стандартную библиотеку, например, Java или Python.
@ Джаррод Роберсон: Пожалуйста, опубликуйте свой ответ как ответ, чтобы мы могли правильно его оценить.
С.Лотт
@Jarrod понадобятся некоторые примеры, поскольку в стандартных библиотеках большинство классов попадают в первую категорию, которую я перечислил.
Николь
@Renesis Посмотрите на мой обновленный ответ.
Мэтью Родатус
@ Мэтью - мне это нравится. Вы выразили то, что я подозревал, но не знали, как кодифицировать.
Николь

Ответы:

293

Используйте множественное число для пакетов с однородным содержимым и единственное число для пакетов с неоднородным содержимым.

Класс похож на отношение к базе данных. Отношение к базе данных должно быть названо в единственном числе, поскольку его записи считаются экземплярами отношения. Функция отношения состоит в том, чтобы составлять сложную запись из простых данных.

Пакет, с другой стороны, не является абстракцией данных. Помогает в организации кода и разрешении конфликтов имен. Если пакет назван в единственном числе, это не означает, что каждый член пакета является экземпляром пакета; он содержит связанные, но разнородные понятия. Если он назван во множественном числе (как они часто являются ), я бы ожидать , что пакет содержит однородные понятия.

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

Мэтью Родатус
источник
13
По аналогичному вопросу см. English.stackexchange.com/q/25713 . Категория аналогична единственным число и тип аналогичен множественный.
Мэтью Родатус
4
Сама ссылка, которую вы указали, показывает исключение из этого правила. beansявляется множественным, однако java.beansсодержит все виды классов, связанные с JavaBeans.
SkyDan
Хороший ответ, но я не согласен с логикой отношений с базой данных. Отношения в ERD являются единичными, потому что они показывают отношения между сущностями. Таблицы являются физической реализацией отношений, и они содержат несколько строк, и поэтому должны быть множественными IMO. Ответ на вопрос «что в этой таблице?» это «пользователи», а не «пользователь». Конечно, кажется, что единичные имена чаще встречаются в корпоративном мире (C #, Java), чем в таких сообществах, как Ruby, Python, Javascript и PHP.
ryeguy
4
Комментарий @ SkyDan указывает на что-то очень важное, что здесь упускается из виду. Мне кажется, что множественное наименование «java.beans» было на самом деле ошибкой, и вместо этого оно должно было называться «java.bean», в единственном числе.
Вики Чиджвани
6
@VickyChijwani @SkyDan, поскольку JavaBeans ™ является товарным знаком, они, вероятно, хотели оставить имя как есть, чтобы ссылаться на саму технологию, и, следовательно, они использовали java.beans.
Хиджази
1

Это, вероятно, зависит от конкретного языка. В .NET (C #) это наиболее определенно должно быть множественное число, если вероятна коллизия имен типа пространства имен ( type name expected but namespace foundошибка). Я имел дело с этим, это не приятно и приводит к чрезмерной квалификации имен типов по всему коду. Пример .

логово
источник