在试图让我的头脑进入一些设计模式时,我遇到了一个让我感到困惑的示例 - 希望它很容易解释,而我只是想念它。
我的问题是网关适合“哪里”?作为附加的数据访问点,它似乎是多余的。
示例代码包含三个类 -
person
- 每个对象属性都有 getter 和 setter 方法personDAO
- 有数据调用来执行 CRUD。 personGateway
- 其中有 getAll
和 getCount
- 哪些也是数据调用...??? 我完全开始对数据进行 DAO 调用,并且 DAO 使用“person”类创建一个对象以传回 - 但为什么不放
getAll
和
getCount
在 DAO 中???
“网关”在这个游戏中扮演什么逻辑位置?
--- 阅读回复后添加---
好的 - 我在搜索时显然错过了这个 - 它确实“有助于”澄清 -
Need some clarification with Patterns (DAO x Gateway) - 然而,它似乎非常以 Java 为中心,它实际上跳过了我希望的区别 -
我想答案是 DAO 返回一个“对象”,而“对象”是一个单一的实体……而不是一个集合。如果你正在重新调整一个集合(如果你“应该”,这是有争议的)那么你会使用网关......但在任何情况下你都不应该用集合混淆 DAO......
请您参考如下方法:
网关模式
A gateway encapsulates the semantic gap between the object-oriented domain layer and the relation-oriented persistence layer.
定义取自 here .
您示例中的网关也称为“服务”。服务层很重要,因为它在处理 Person 实体时提供了更高的抽象和更“整体”的方式。
这个“额外”层的原因是系统中连接到一个人的其他对象。例如,假设有
Car
对象,每个人可能有一辆汽车。现在,当我们出售汽车时,我们应该更新“owner”字段,您还需要对涉及的 Person 对象(卖方/买方)执行相同的操作。
为了以面向对象的方式实现这种“级联”(不耦合对象实现)
BuyCarService
将更新新所有者:服务将调用
CarDAO
和
PersonDAO
为了更新数据库中的相关字段,以便 DAO 不必“了解”彼此,从而解耦实现。
希望这能让事情更清楚。