パッケージ名は単数形ですか複数形ですか?


227

多くの場合、特にライブラリでは、パッケージには単一の概念に基づいて編成されたクラスが含まれます。例: XML、SQL、ユーザー、設定、デシベル。私たちは皆、これらのパッケージが単数形で正しいとかなり自然に感じると思います。

com.myproject。xml .Element
com.myproject。sql .Connection
com.myproject。ユーザー .User
com.myproject。ユーザー .UserFactory

ただし、タスク、ルール、ハンドラー、モデルなど、単一のタイプの実装のコレクションを実際に含むパッケージがある場合、これは望ましいですか?

com.myproject。タスク .TakeOutGarbageTask
com.myproject。タスク .DoTheDishesTask
com.myproject。タスク .PaintTheHouseTask

または

com.myproject。task .TakeOutGarbageTask
com.myproject。タスク .DoTheDishesTask
com.myproject。task .PaintTheHouseTask


5
単数形だけのようなデータベースのテーブル名は常に単数形が異なる理由のためでなければなりません。たとえば、JavaやPythonなどの一般的な標準ライブラリを見てください。

@Jarrod Roberson:適切に投票できるように、回答を回答として投稿してください。
S.Lott

@Jarrodはいくつかの例を必要とします。標準ライブラリでは、ほとんどのクラスが最初にリストしたカテゴリに分類されるためです。
ニコール

@Renesis最新の回答をご覧ください。
マシューロダトゥス

@マシュー-私はそれが好きです。あなたは私が疑ったことを言いましたが、成文化する方法がわかりませんでした。
ニコール

回答:


293

同種のコンテンツを持つパッケージには複数形を使用し、異種のコンテンツを持つパッケージには単数形を使用します。

クラスはデータベース関係に似ています。データベースリレーションは、そのレコードがリレーションのインスタンスと見なされるため、単数形で名前を付ける必要があります。リレーションの機能は、単純なデータから複雑なレコードを作成することです。

一方、パッケージはデータの抽象化ではありません。コードの編成と名前の競合の解決を支援します。パッケージの名前が単数形である場合、パッケージの各メンバーがパッケージのインスタンスであることを意味しません。関連するが異種の概念が含まれています。複数の名前が付けられている場合(多くの 場合)、パッケージには同種の概念が含まれていると思われます。

たとえば、型はのインスタンスを含むコレクションであるため、型のTaskCollection代わりに名前を付ける必要がありTasksCollectionますTask。名前の付いたパッケージcom.myproject.taskは、含まれる各クラスがタスクのインスタンスであることを意味しません。あるかもしれませんTaskHandlerTaskFactoryなどという名前のパッケージcom.myproject.tasks:しかし、すべてのタスクですさまざまな種類を含んでいるでしょうTakeOutGarbageTaskDoTheDishesTaskなど


13
同様の質問については、english.stackexchange.com / q / 25713を参照してください。カテゴリは、単数形に似ているとタイプが複数に類似しています。
マシューロダタス

4
あなたが提供したまさにリンクは、このルールの例外を示しています。beans複数ですが、java.beansJavaBeansに関連するすべての種類のクラスが含まれています。
SkyDan

良い答えですが、データベース関係のロジックには同意しません。ERDの関係は、エンティティ間の関係を示しているため特異です。テーブルはリレーションの物理的な実装であり、複数の行を保持するため、複数のIMOにする必要があります。「この表には何がありますか?」に対する答え 「ユーザー」ではなく「ユーザー」です。確かに、単数形の名前付けは、Ruby、Python、Javascript、PHPなどのコミュニティでよりも、エンタープライズの世界(C#、Java)でより一般的であるようです。
ライガイ

4
@SkyDanのコメントは、ここで完全に見落とされている非常に重要なことを指摘しています。「java.beans」の複数形の命名は実際には間違いであり、代わりに「java.bean」という単数形の名前が付けられているはずです。
ヴィッキーチワニ

6
@VickyChijwani @SkyDanはJavaBeans™が商標であるため、おそらく技術そのものを指す名前をそのままにしておきたいので、を使用しましたjava.beans
-Hejazi

1

これはおそらく特定の言語に依存します。.NET(C#)では、名前空間タイプの名前の衝突がtype name expected but namespace found発生する可能性が高い場合(エラー)、必ず複数形にする必要があります。私はこれに対処しました、それは快適ではなく、コード全体で型名を過剰に修飾します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.