4

GraphRepositoryというインターフェースがあることを知りました。ジョブを実行する自家製のインターフェースを実装するユーザー用のリポジトリがありますが、代わりに GraphRepository を実装すべきではないかと考えていました。実装するのにかなり時間がかかり、いくつかのメソッドが役に立たない場合でも、それが標準であり、このインターフェイスで定義されている多くのメソッドをすでに再コーディングしていると思います。

では、「YAGNI」コードを書くべきですか、それとも標準を尊重しないべきですか? あなたのアドバイスは何ですか?

4

1 に答える 1

11

実際に GraphRepository を実装する必要はありませんが、拡張します。の原則Spring-Dataは、すべてのボイラープレート CRUD コードが (起動時にプロキシによって) 処理されるため、GraphRepository を拡張する特定のエンティティのインターフェイスを作成し、必要な特定のメソッドのみを追加するだけです。

例えば; エンティティがあればCustomerNode、標準の CRUD メソッドを作成するために、新しいインターフェイスを作成できますCustomerNodeRepository extends GraphRepository<CustomerNode,Long>。すべてのメソッドGraphRepository(save、findAll、findOne、delete、deleteAll など) はCustomerNodeRepository、実装コードを 1 行も書かなくても Spring-Data-Neo4J からアクセスして実装できるようになりました。

このパターンにより、単純な CRUD ではなく、特定のリポジトリ コード (findByNameAndDateOfBirth など) で作業できるようになりました。

Spring-Data パッケージは、リポジトリとのやり取りに非常に役立ちます。膨大な量のコードを削減でき (コード行が 80% 以上削減されています)、使用することを強くお勧めします。

編集: カスタム実行の実装

独自のカスタム動作を Repository メソッドに追加する場合は、インターフェイスとカスタム実装をマージするという概念を作成します。たとえば、呼び出されるメソッドを作成したいfindCustomerNodeBySomeStrangeCriteriaとします。これを行うには、実際にリレーショナル データベースにリンクして関数を実行したいとします。

最初に、'extra' メソッドのみを含む個別のスタンドアロン インターフェイスを定義します。

public interface CustomCustomerNodeRepository {
   List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object strangeCriteria);
}

次に、通常のインターフェイスを更新して、GraphRepository だけでなく、新しいカスタム インターフェイスも拡張します。

public interface CustomerNodeRepository extends GraphRepository<CustomerNode,Long>, CustomCustomerNodeRepository {

}

最後の部分は、実際にfindCustomerNodeBySomeStrangeCriteriaメソッドを実装することです

public class CustomerNodeRepositoryImpl implements CustomCustomerNodeRepository {

   public List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object criteria) {
    //implementation code
}

}

そのため、注意すべき点がいくつかあります。

  • カスタム実装を持つカスタムメソッドを定義するのインターフェースを作成します (Spring-Data 互換の「findBy...」メソッドとは異なります)。
  • CustomerNodeRepository インターフェース (「メイン」インターフェース) は、GraphRepository「カスタム」インターフェースの両方を拡張します。
  • カスタム インターフェイスのみを実装するクラスでは、「カスタム」メソッドのみを実装します。
  • 「カスタム」実装クラスは、(デフォルトで) ImplSpring Data によってピックアップされる「メイン」インターフェースと呼ばれる必要があります (したがって、この場合CustomNodeRepositoryImpl)

カバーの下で、Spring Data は、自動構築されたとクラス実装CustomerNodeRepositoryのマージとして のプロキシ実装を提供します。クラスの名前の理由は、Spring Data が簡単に/正常に取得できるようにするためです (これ上書きできるため、*Impl を検索しません)。GraphRepositoryCustomCustomerNodeRepository

于 2013-07-21T14:07:27.080 に答える