jpm*_*yob 7 oop design-patterns
在试图让我的头脑进入一些设计模式时,我遇到了一个令我困惑的样本 - 希望它能够很容易解释,我只是想念它.
我的问题是"在哪里"网关适合这个?它似乎是多余的,作为一个附加的数据访问点.
示例代码有三个类 -
person - 具有每个对象属性的getter和setter方法personDAO - 有数据调用来做CRUD.personGateway- 哪个有- getAll和getCount- 也是数据调用...... ???我完全得到制作DAO调用数据,和DAO使用"人"类来创建一个对象传回-但为什么不把getAll与getCount在DAO ???
"网关"在这个游戏中扮演什么逻辑位置?
---读完后回复---
好的 - 我在搜索时显然错过了这个 - 它确实"帮助"澄清 - 需要对模式(DAO x Gateway)进行一些澄清 - 但是,它看起来非常以java为中心,它实际上跳过了我希望的区别 -
我想答案是DAO返回一个"对象"而一个"对象"是一个单独的实体......而不是一个集合.如果你正在重新收集一个集合(如果你"应该"这是有争议的话)那么你就会使用网关......但是在任何情况下你都不应该用收集来混淆DAO ......
网关模式
网关封装了面向对象的域层和面向关系的持久层之间的语义鸿沟.
定义取自这里.
您的示例中的网关也称为"服务".服务层很重要,因为它在处理Person实体时提供了更高的抽象和更"整体"的方式.
这个"额外"图层的原因是系统中连接到Person的其他对象.例如,假设有Car对象,每个人可能有一辆汽车.现在,当我们出售汽车时,我们应该更新"所有者"字段,进一步你要对所涉及的Person对象(卖方/买方)做同样的事情.
为了以OO方式实现这种"级联"(不耦合对象实现)BuyCarService将更新新的所有者:服务将调用CarDAO并PersonDAO更新数据库中的相关字段,以便DAO不必"知道"彼此并因此解耦实施.
希望这会让事情更加清晰.