模型bean上的分层架构和持久性注释?

我想在新的Java EE Web应用程序中遵循关注点分离设计原则。 如果我理解正确,这意味着我必须保持我的DAL (数据访问层)的技术选择在我的模型/业务层中不可见。

当我使用Spring Data Neo4j时,我必须使用例如“@NodeEntity”注释我的模型bean,这是一个特定于Spring Data Neo4J的注释。 这似乎将模型层与数据访问层混合在一起。

  • 这是我在这里做的好分析吗?
  • 如果是这样,我如何使用Spring Data Neo4j注释创建一个独立于我的DAL的模型?

谢谢你的帮助!

一种常见的解决方案是通过接口原理应用编程,为每个实体和关系创建接口,并使用SDN注释类实现它们。 这样,模型层只能通过接口访问实体,而不了解实现。 为了实现数据库访问操作,您可以创建DAO接口并使用SDN存储库和/或Cypher查询来实现它们。 一个例子:

public interface Item { String getName(); ... } public interface ItemDAO { Item lookup(String name); ... } @NodeEntity public class ItemNode implements Item { @GraphId private Long id; private String name; ... public String getName() { return name; } ... } public class Neo4jItemDAO implements ItemDAO { ... @Override public Item lookup(String name) { return neo4jOperations.lookup(ItemNode.class,"name", name).to(ItemNode.class).singleOrNull(); } } 

在您的模型类中,您可以通过以下方式访问实体:

 @Autowired ItemDAO itemDAO; Item item = itemDAO.lookup("name");