Java のインターフェイスは独自のディレクトリに配置する必要がありますか? または、インターフェイスとその実装の両方を同じディレクトリ (パッケージ) に配置する必要がありますか? ありがとう。
7 に答える
私が見た 1 つのパターンは、インターフェイスをベース ディレクトリに配置し、そこからサブディレクトリに実装を配置することです。
たとえば、インターフェイスは次のようになります。
com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.)
com.myproject.data.dao.ProductDao
実装は次のようになります。
com.myproject.data.dao.hibernate.HibernateCustomerDao
com.myproject.data.dao.hibernate.HibernateProductDao
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao
etc.
これはある状況ではうまくいくかもしれませんし、他の状況ではうまくいかないかもしれませんが、ちょっと考えてみてください。
インターフェイスは、独自のディレクトリを特に必要としません。クラスが意味のある場所に配置されるべきであるのと同様に、それらは意味のある場所に配置されるべきです。多くの場合、それらを同じ場所に配置することは理にかなっています。
すでにいくつかの良い点があるので、1 つだけ追加したいと思います。
一部のプロジェクトでは、すべてのインターフェースを 1 つのサブプロジェクト (maven モジュール) に配置し、実装を別のサブプロジェクトに配置することさえしました。このようにして、インターフェイスを実装から完全に分離し、プロジェクトの非常に早い段階でインターフェイス プロジェクトを完成させ、それらのインターフェイスに対して作業している他のチームにそれを提供することができました。各プロジェクト内で、同じパッケージを使用しました。
一般に、インターフェイスとその実装を分離する必要があります。一貫性がある限り、その方法は問題ではありません。
同じパッケージ。ユーザーは、インターフェイスを使用していることを認識したり、気にしたりしてはなりません
好きな場所に配置できますが、インターフェイスを同じパッケージおよびディレクトリ構造に保持することはまったく問題ありません。Java apiを見てください。いずれかのパッケージを選択すると、多くのパッケージにクラスとインターフェースの両方が含まれていることがわかります。インターフェースには、同じパッケージ内のクラスによって実装されるものとそうでないものがあります。
インターフェイス用に別のディレクトリを用意する必要があると主張するのは、最悪の方法だと思います。/services や /impl などのディレクトリを見たことがありますが、これらはディレクトリ構造を台無しにするだけです。私の現在の職場では、出入りする多くの請負業者を雇用しており、一部のプロジェクトには複数のタイプのインターフェイス ディレクトリがあります。別のディレクトリを使用することが理にかなっていると思うのは、たとえば EJB などの他のプロジェクトにインターフェイスをコピーする予定がある場合だけですが、インターフェイスに共有プロジェクトを使用する場合でも、同じパッケージを持つことができます。
短い答えは、どこでも好きなところですが、クラスとインターフェイスを分離する必要があるとは思わないでください。多くの場合、それらを同じパッケージ/ディレクトリに保持することをお勧めします。
インターフェイスを同じディレクトリ(パッケージ)に配置する必要はまったくありません。インターフェイスにパブリック アクセスがある場合は、任意のパッケージのどこにでもインポートできます。
私がそれを読んだときの質問(しかし、それは奇妙に定式化されています)は、インターフェースが独自のディレクトリにあるべきかどうかではありません。問題は、次のように、1 つのブランチにインターフェイスのみが含まれる完全なディレクトリ構造(質問のタイトルにあるものを強調するために太字) を再作成する必要があるかどうかです。
pureooabstraction/
|
|_com/
|
|_example/
|
|__SomeInterface.java
|__SomeOtherInterface.java
src/
|
|_com/
|
|_example/
|
|__SomeClass.java
|__...
pureooabstraction /ディレクトリ構造には、「純粋な抽象クラス」(Java の「抽象」定義ではなく、OO の観点から)、別名 Java のインターフェースのみが含まれます。
そして、「コード」が存在するささいな実装の詳細 (OOA/OOD レベルには存在しない) は、src/ディレクトリに配置されます。
開発プロセスが OOA から OOD、OOP に移行する場合、それは確かに理にかなっています。