Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringDAO类应该只引用模型的一个对象吗?_Spring_Hibernate_Design Patterns_Dao_One To One - Fatal编程技术网

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