web-dev-qa-db-ja.com

パッケージ名は単数または複数のどちらにする必要がありますか?

多くの場合、特にライブラリでは、パッケージには単一の概念に基づいて編成されたクラスが含まれています。例: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

245
Nicole

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

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

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

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

314
Matthew Rodatus

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

1
Den