2

Javaでインターフェースの階層を作成するのは悪いと考えられていますか?

次のようにリポジトリレイヤーを設計しました:

  • Repository、CRUD メソッドを含む
  • JPARepository、JPAでのみ必要な潜在的なメソッド
  • SomeModelRepository、そのモデルのリポジトリの特定のメソッド。
  • SomeModelJPARepository、JPARepository AND SomeModelRepository を拡張します

これは悪い習慣と見なされますか?それは奇妙に組織化されたヒエラルキーですか?

4

1 に答える 1

4

いいえ、実際には、少なくともライブラリでは、インターフェイス階層を作成することはかなり一般的です。たとえば、NavigableSetには 4 つのインターフェイス層 (SortedSet、Set、Collection、 Iterable ) があります。

この例では、ダイヤモンドの継承は少し独特ですが、必要に応じて、それ自体は悪い選択ではありません。しかし通常、ツリー階層の方がはるかに明確で優れています。この場合、次のいずれかを作成することを検討します。

  1. SomeModelRepository は JPARepository のサブクラスであるため、すべての実装クラスで JPA をサポートする必要があります。
  2. リポジトリのサブクラスではなく、別のインターフェースで JPA サポートを指定します。次に、すべてのクラスは、特定の Repository インターフェースとは無関係に JPA を実装するかどうかを選択できます。例については、シリアライズ可能を参照してください。これは、クラスが「シリアライゼーション」のような特定の機能、またはこの場合のような「永続性」をサポートしていることを通知するためのデファクト ソリューションです。
于 2012-11-06T20:37:26.747 に答える