到目前为止,我所处理的大部分对象看起来非常像它们所基于的数据库表。因此,我有一个映射db.fish表的fish对象和一个映射db.fish_transfer表的fish_transfer对象等等。
现在我正在开发一个名为Provenance的类,用于管理不易映射到单个数据库表的数据。以下是情况:
每条鱼都有一个来源,即关于它进入我们系统之前的信息。有4种来源:未知、交付、现场繁殖、重复使用。所有来源都与fish_id和日期相关联,除了“现场繁殖”外,所有来源都需要立即设置计数。除此之外,在它们创建/删除或更改时,它们在关联的数据和操作方面都有很大不同。
我曾想将来源类型存储在fish对象中。因此,在实例化时,fish将调用ProvenanceFactory::make($this->fish_id, $this->ptype)并获取一个正确子类的provenance对象$prov。那么如果编辑了来源类型会发生什么呢?
可能性如下:
1. 调用$this->prov->delete(),然后调用ProvenanceFactory::make($this->fish_id, $newtype); $this->prov->setall($data);
2. 调用ProvenanceFactory::morph(&$this->prov,$newtype); $this->prov->setall($data);
3. 调用$this->prov->morph($newtype); $this->prov->setall($data);
4. 调用$this->prov->morph($newtype, $data);
5. ??
在所有情况下,编辑来源类型都会导致更新或删除特定于Provenance子类的各种表中的一组数据库行,然后在各种其他表中创建另一组行。
哪种上述可能性(或其他)是最好的选择?我应该尝试实现哪些设计模式(除了工厂模式)?
现在我正在开发一个名为Provenance的类,用于管理不易映射到单个数据库表的数据。以下是情况:
每条鱼都有一个来源,即关于它进入我们系统之前的信息。有4种来源:未知、交付、现场繁殖、重复使用。所有来源都与fish_id和日期相关联,除了“现场繁殖”外,所有来源都需要立即设置计数。除此之外,在它们创建/删除或更改时,它们在关联的数据和操作方面都有很大不同。
我曾想将来源类型存储在fish对象中。因此,在实例化时,fish将调用ProvenanceFactory::make($this->fish_id, $this->ptype)并获取一个正确子类的provenance对象$prov。那么如果编辑了来源类型会发生什么呢?
可能性如下:
1. 调用$this->prov->delete(),然后调用ProvenanceFactory::make($this->fish_id, $newtype); $this->prov->setall($data);
2. 调用ProvenanceFactory::morph(&$this->prov,$newtype); $this->prov->setall($data);
3. 调用$this->prov->morph($newtype); $this->prov->setall($data);
4. 调用$this->prov->morph($newtype, $data);
5. ??
在所有情况下,编辑来源类型都会导致更新或删除特定于Provenance子类的各种表中的一组数据库行,然后在各种其他表中创建另一组行。
哪种上述可能性(或其他)是最好的选择?我应该尝试实现哪些设计模式(除了工厂模式)?