SpringDAO类应该只引用模型的一个对象吗?
我对春天很陌生,我会直截了当的。我的应用程序中的层似乎相当传统:SpringDAO类应该只引用模型的一个对象吗?,spring,hibernate,design-patterns,dao,one-to-one,Spring,Hibernate,Design Patterns,Dao,One To One,我对春天很陌生,我会直截了当的。我的应用程序中的层似乎相当传统: - Controller - DTO - Service - DAO - Model 一般来说,DAO接口的每个实现是否应该只处理模型中的一个对象?(很抱歉,我只能找到一些琐碎的例子,这些例子实际上并不涉及这一点) 可能是在一对一关系中,双向的,比如说只有一个共享主键。Hibernate不在乎,除了映射之外,它不能处理彼此之间的POJO引用。假设存在这种情况,即: Table1: Parent Table2
- Controller
- DTO
- Service
- DAO
- Model
一般来说,DAO接口的每个实现是否应该只处理模型中的一个对象?(很抱歉,我只能找到一些琐碎的例子,这些例子实际上并不涉及这一点)
可能是在一对一关系中,双向的,比如说只有一个共享主键。Hibernate不在乎,除了映射之外,它不能处理彼此之间的POJO引用。假设存在这种情况,即:
Table1: Parent Table2: Child
------------------ ----------------------
| PARENT_ID (PK) |<---|CHILD_ID (PK and FK)|
------------------ ----------------------
看看上面提到的层,实现这种逻辑的正确位置在哪里?如果Hibernate负责模型对象和数据库之间的映射,那么谁应该负责模型的POJO对象之间的一致性
我的标题问题是,如果DAO可以处理模型中的几个POJO,DAO也可以保持这些POJO的一致性
非常感谢
再见您的DAO在设计时应该只考虑一件主要事情——业务责任 例如:
AccountService <--> AccountsDAO
| | |
AccountsModel ClientModel BalanceModel
AccountService AccountsDAO
| | |
AccountsModel客户模型余额模型
不能将DAO限制为一个模型。DAO应该执行它可以提供的功能来支持您的服务层 您的hibernate/ORM模型只处理表之间的关系,它们不知道服务层需要什么样的调用
结束语:如果DAO是为自己的目的而设计的,那么DAO可以与许多模型/POJO交互。为什么还要麻烦使用典型层呢?查看与DDD密切相关的六边形架构(,)。一旦你按照业务职责(而不是层次)组织了项目,整个项目就更容易阅读和推理。我想说,这与Hibernate和Spring没有太大关系,而是一个架构问题。这个问题在目前的状态下只会给出固执己见的答案。谢谢,我来看看。谢谢,我添加了设计图案标签。我想问的是,在SpringMVCWeb应用程序中处理这类问题的“常用做法”通常是什么?“您不能将DAO限制为一种模型。”。。你可以,如果你想,没有什么可以阻止你当然是的。DAO应该执行它可以提供的功能来支持您的服务层@空白。我不是说不用。我想说的是不要限制。我希望这是有道理的。哦,真的非常感谢你。因此,我理解您实际上可以得到一个DAO的类,它引用了模型中的两个对象,如果这包含在业务职责中的话。那么我可以有:model1和model2dao.java,这可能吗?@desmogix您的DAO应该根据责任来命名,这就清楚了它应该做什么。您不必担心它的命名中的模型。它也可以是免费的:)
AccountService <--> AccountsDAO
| | |
AccountsModel ClientModel BalanceModel