1

私は、フロントエンドとバックエンドという 2 つの別々のプロジェクトに分割する予定の、比較的複雑な Neo4J アプリケーションを構築しようとしています。フロントエンドは HTML5 で、この質問には関係ありません。バックエンドには Jersey との REST インターフェイスがありますが、質問があるのはその REST インターフェイスの背後にある構造です。

Atm、これは私が想像した方法です:

RESTimpl <-DATA-> Service  <-DTO-> Repository <-NODE-> DAO <--> Neo4j Singleton

一般的なフローは、RESTimpl が JSON を受け取り、それを String、int などの単純な Java オブジェクトに変換することです。これらは、DTO を作成するサービスに渡されます。その DTO は、そのような DTO をデータベースに書き込むために必要なすべての DAO 呼び出しを実行するリポジトリに渡されます (1 つの DTO で複数のノードと関係を作成する必要がある場合があります)。DAOの場合、ノードの作成、リレーションの作成、ノードの削除などの非常に基本的なグラフ機能を備えたCore APIとCypher実装の両方を作成することを考えていました...基本的にすべてのリポジトリに役立つメソッド。Neo4j シングルトンには、GraphDatabaseService インスタンスといくつかの構成要素が含まれます。

これは比較的複雑な構造ですが、プロジェクトを非常にモジュール化したいと考えています。依存性注入を簡単に実行できます。(すべてがインターフェイスに対しても書き込まれます)

ただし、インターネット上のすべての例では、実装が異なります。彼らは実際にDTOをNeo4Jノードのラッパーにするか、少なくとも基礎となるノードをDTOに保存します。ただし、REST-Service-DAO 構造のみが許可されます。

しかし、リポジトリの実装を変更して、アプリケーションの背後に別のデータベースを配置することはできません。

私がやりたいことをするための「最も正しい方法」は何ですか?

4

1 に答える 1

3

私はあなたが上で説明したことを正確に使用していますが、それが非常にうまく機能し(1つのプロジェクトが本番環境にあり、もう1つはほぼそこにあります)、懸念が混在していないことがわかりました。私は Spring Data を使用していませんが、考慮すべきオプションです。

ドメイン オブジェクトを標準の POJO として定義しました。Neo4j のものはまったくありません。それらの永続性は、大部分が Cypher クエリを含む DAO によって管理され、場合によっては複雑さに応じて一部のコア API が機能します。

GraphDatabase は注入されます (2 つのコンテキストがあります。EmbeddedGraph の実装は運用用に注入され、ImpermanentGraph はテスト用に注入されます)。REST サービスは、ドメイン オブジェクトや DTO を処理する Jersey を使用して公開されます。そのため、Neo4j コードは永続レイヤーでのみ表示されます。index/fetch by index などに公開されているいくつかの一般的な便利なメソッドを取得しました。

私はラップノードの方法には行きません-それを試してみましたが、それはそれ自身の問題のセットをもたらし、やや臭いデザインになることがわかりました. あなたは正しい軌道に乗っているようです(少なくとも私には)

于 2013-04-26T06:02:50.610 に答える