多くの場合、特にライブラリでは、パッケージには単一の概念に基づいて編成されたクラスが含まれています。例:xml、sql、user、config、db。これらのパッケージはsingularで正しいと私たちはみな自然に感じています。
com.myproject .xml。Element
com.myproject .sql。Connection
com.myproject .ユーザー。ユーザー
com.myproject .ser。UserFactory
ただし、実際に単一タイプの実装のコレクション-タスク、ルール、ハンドラー、モデルなどを含むパッケージがある場合、どちらが望ましいですか?
com.myproject .tasks。TakeOutGarbageTask
com.myproject .tasks。DoTheDishesTask
com.myproject .tasks。PaintTheHouseTask
または
com.myproject .task。TakeOutGarbageTask
com.myproject .task。DoTheDishesTask
com.myproject .task。PaintTheHouseTask
同種のコンテンツを持つパッケージには複数を使用し、異種のコンテンツを持つパッケージには単数を使用します。
クラスはデータベースの関係に似ています。データベースの関係は、そのレコードが関係のインスタンスと見なされるため、単数形で名前を付ける必要があります。リレーションの機能は、単純なデータから複雑なレコードを作成することです。
一方、パッケージはデータの抽象化ではありません。これは、コードの編成と名前の競合の解決を支援します。パッケージが単数形で名前が付けられている場合でも、パッケージの各メンバーがパッケージのインスタンスであるとは限りません。関連するが異種の概念が含まれています。複数形で名前が付けられている場合(それらは しばしばare であるため)、パッケージには同種の概念が含まれていると思います。
たとえば、型はTaskCollection
のインスタンスを含むコレクションであるため、TasksCollection
ではなくTask
という名前にする必要があります。 com.myproject.task
という名前のパッケージは、含まれている各クラスがタスクのインスタンスであることを意味しません。 TaskHandler
、TaskFactory
などがある場合があります。ただし、com.myproject.tasks
という名前のパッケージには、すべてのタスクであるさまざまなタイプが含まれます:TakeOutGarbageTask
、DoTheDishesTask
など.
これはおそらく特定の言語に依存します。 .NET(C#)では、名前空間とタイプの名前の衝突が発生する可能性がある場合(type name expected but namespace found
エラー)。私はこれに対処しましたが、それは快適ではなく、コード全体で型名が修飾されすぎます。 例 。