何时使用Gateway设计模式

jpm*_*yob 7 oop design-patterns

在试图让我的头脑进入一些设计模式时,我遇到了一个令我困惑的样本 - 希望它能够很容易解释,我只是想念它.

我的问题是"在哪里"网关适合这个?它似乎是多余的,作为一个附加的数据访问点.

示例代码有三个类 -

  1. person - 具有每个对象属性的getter和setter方法
  2. personDAO - 有数据调用来做CRUD.
  3. personGateway- 哪个有- getAllgetCount- 也是数据调用...... ???

我完全得到制作DAO调用数据,和DAO使用"人"类来创建一个对象传回-但为什么不把getAllgetCount在DAO ???

"网关"在这个游戏中扮演什么逻辑位置?

---读完后回复---

好的 - 我在搜索时显然错过了这个 - 它确实"帮助"澄清 - 需要对模式(DAO x Gateway)进行一些澄清 - 但是,它看起来非常以java为中心,它实际上跳过了我希望的区别 -

我想答案是DAO返回一个"对象"而一个"对象"是一个单独的实体......而不是一个集合.如果你正在重新收集一个集合(如果你"应该"这是有争议的话)那么你就会使用网关......但是在任何情况下你都不应该用收集来混淆DAO ......

alf*_*sin 5

网关模式

网关封装了面向对象的域层和面向关系的持久层之间的语义鸿沟.

定义取自这里.

您的示例中的网关也称为"服务".服务层很重要,因为它在处理Person实体时提供了更高的抽象和更"整体"的方式.

这个"额外"图层的原因是系统中连接到Person的其他对象.例如,假设有Car对象,每个人可能有一辆汽车.现在,当我们出售汽车时,我们应该更新"所有者"字段,进一步你要对所涉及的Person对象(卖方/买方)做同样的事情.

为了以OO方式实现这种"级联"(不耦合对象实现)BuyCarService将更新新的所有者:服务将调用CarDAOPersonDAO更新数据库中的相关字段,以便DAO不必"知道"彼此并因此解耦实施.

希望这会让事情更加清晰.