我正在寻找构建一个相对复杂的 Neo4J 应用程序,我打算将其拆分为两个独立的项目,即前端和后端。前端将是 HTML5 并且与此问题无关,后端将具有与 Jersey 的 REST 接口,但我有疑问的是该 REST 接口背后的结构。
Atm,这就是我的设想:
RESTimpl <-DATA-> Service <-DTO-> Repository <-NODE-> DAO <--> Neo4j Singleton
一般流程是 RESTimpl 接收 JSON 并将其转换为简单的 java 对象,如字符串、int 等,然后将这些对象传递给使用它们创建 DTO 的服务。该 DTO 被传递到存储库,该存储库执行将此类 DTO 写入数据库所需的所有 DAO 调用(一个 DTO 可能需要创建多个节点和关系)。对于 DAO,我正在考虑创建一个 Core API 和 Cypher 实现,它只有非常基本的图形功能,比如创建节点、创建关系、删除节点……基本上对所有存储库都有用的方法。Neo4j 单例将包含我的 GraphDatabaseService 实例和一些配置内容。
这是一个相对复杂的结构,但我希望项目非常模块化。使依赖注入变得容易。(所有内容也将针对接口编写)
但是,互联网上的所有示例都有不同的实现。他们实际上使他们的 DTO 成为 Neo4J 节点的包装器,或者至少将底层节点存储在 DTO 中。但它确实只允许 REST-Service-DAO 结构。
但它不允许我更改存储库实现并将不同的数据库放在应用程序后面。
做我想做的事情的“最正确的方法”是什么?