LoginSignup
93
86

More than 5 years have passed since last update.

パッケージ名は、単数形?複数形?

Last updated at Posted at 2013-08-31

Should package names be singular or plural? をざっと翻訳 (as of 2013.8.31)

訳注:意外と見逃しがちなネームスペースの単数形と複数形の問題。比較的シンプルにまとまったQAを見つけたので訳してみました(コメントは訳していません。java.beans は例外であったり、リレーションについては異論があったりするようです)。

Question (42 votes) by NickC

しばしば、ライブラリにおいてパッケージはひとつの概念で構成されるクラス群を含みます。たとえば、 xmlsqluserconfigdbです。皆さん、至って自然にこれらのパッケージ名は単数であることが正しいと感じるのではないかと思います。

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. user .User
com.myproject. user .UserFactory

しかし、もし、同一タイプの実装の集まりを含むようなパッケージの場合、たとえば、 tasksruleshandlersmodels などですが、以下のどちらが好ましいですか?

com.myproject. tasks .TakeOutGarbageTask
com.myproject. tasks .DoTheDishesTask
com.myproject. tasks .PaintTheHouseTask

または

com.myproject. task .TakeOutGarbageTask
com.myproject. task .DoTheDishesTask
com.myproject. task .PaintTheHouseTask

Answer (54 votes) by Matthew Rodatus

同質な(homogeneous、ホモジーニャス、ホモ)内容で構成されるパッケージには複数形を使い、異種混合な(heterogeneous、ヘテロジーニャス、ヘテロ)内容で構成されるパッケージには単数形を使うこと

クラスはデータベースのリレーションに似ています。データベースのリレーションは単数形の名前がつけられべるべきです。なぜなら、そのレコードはリレーションのインスタンスとみなされるからです。リレーションの役割とは、単純なデータから複雑なレコードを構成することです。

一方で、パッケージはデータの抽象化ではありません。パッケージはコードの組織化と名前衝突の解決を支援します。もし、パッケージが単数形であれば、それぞれのメンバーはパッケージのインスタンスでないことを意味します。そのときパッケージは関係するけれども異質な概念を含むのです。もし、パッケージが複数形であれば(よくあるケース)、パッケージが同質な概念を含むことを期待します。

たとえば、Task のインスタンスを含むコレクションである時、型の名称は、"TasksCollection" ではなく、 "TaskCollection" であるべきです。com.myproject.task という名称のパッケージならば、含まれるクラスは task のインスタンスではありません。TaskHandler や TaskFactory といったものでしょう。一方で、com.myproject.tasks という名称のパッケージは、すべて Task であるが異なる型を含むでしょう。たとえば、TakeOutGarbageTask や DoTheDishesTask などです。

93
86
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
86