gpt4 book ai didi

php - 哪种设计模式适合这种情况?

转载 作者:搜寻专家 更新时间:2023-10-31 21:43:38 25 4
gpt4 key购买 nike

到目前为止,我处理过的大多数对象看起来都非常像它们所基于的数据库表。所以我有一个映射 db.fish 表的 fish 对象和一个映射 db.fish_transfer 表的 fish_transfer 对象,等等。

现在我正在研究一个类 Provenance,它管理不容易映射到单个数据库表的数据。情况是这样的:

每条鱼都有一个出处,即有关它进入我们系统之前所在位置的信息。有 4 种出处:“未知”、“交付”、“现场培育”和“再利用”。所有出处都有一个 fish_id 和一个相关联的日期,除了“现场繁殖”之外的所有出处都需要立即设置计数。除此之外,它们在与其关联的数据以及在创建/删除或更改它们时必须发生的操作方面有很大不同。

我曾想过将出处类型存储在鱼对象中。因此,在实例化时,fish 会调用 ProvenanceFactory::make($this->fish_id, $this->ptype) 并获得正确子类的来源对象 $prov .那么,如果编辑出处类型会怎样?

可能性:

  • 调用$this->prov->delete() 然后调用$this->prov=ProvenanceFactory::make($this->fish_id, $newtype); $this->prov->setall($data);
  • 调用 ProvenanceFactory::morph(&$this->prov,$newtype); $this->prov->setall($data);
  • 调用 $this->prov->morph($newtype); $this->prov->setall($data);
  • 调用$this->prov->morph($newtype, $data);
  • ??

在所有情况下,编辑起源类型都会导致更新或删除特定于 Provenance 子类的各种表中的一组数据库行,然后在各种其他表中创建另一组行。

以上哪种(或其他)可能性是最好的选择?我应该尝试实现哪些设计模式(工厂模式除外)?

最佳答案

有一个 ProvenanceBase 类怎么样,它有一个复制构造函数。
这样,您的工厂就可以有一个 morph 方法(类似于您编写的第二个项目符号),它只是从现有的 derived 对象创建一个新的 derived 对象。

关于php - 哪种设计模式适合这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7257411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com