Skip to main content
 首页 » 编程设计

oop之何时使用网关设计模式

2024年10月17日41Leo_wl

在试图让我的头脑进入一些设计模式时,我遇到了一个让我感到困惑的示例 - 希望它很容易解释,而我只是想念它。

我的问题是网关适合“哪里”?作为附加的数据访问点,它似乎是多余的。

示例代码包含三个类 -

  • person - 每个对象属性都有 getter 和 setter 方法
  • personDAO - 有数据调用来执行 CRUD。
  • personGateway - 其中有 getAllgetCount - 哪些也是数据调用...???

  • 我完全开始对数据进行 DAO 调用,并且 DAO 使用“person”类创建一个对象以传回 - 但为什么不放 getAllgetCount在 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将更新新所有者:服务将调用 CarDAOPersonDAO为了更新数据库中的相关字段,以便 DAO 不必“了解”彼此,从而解耦实现。

    希望这能让事情更清楚。