7

我正在用 PHP 构建一个应用程序,并且我正在使用数据映射器模式进行数据库访问。我正在考虑使用观察者模式让我的所有映射器观察他们创建的实体,以便他们可以自动将任何更改保存回数据库,而无需我手动解析它们。

我只是想知道这是一个好主意,还是不好的做法等?

我通常使用一些在层次结构中链接在一起的对象,目前必须手动将每个对象解析到它的映射器,这相当乏味,所以只是想提出一个更好的解决方案。

谢谢,杰克

4

2 回答 2

3

对我来说绝对是个好主意。您所做的类似于工作单元模式,该模式旨在跟踪您对映射对象所做的更改并在完成后提交(通常作为单个事务)。

我相信像OutletRepose这样的项目在 PHP 中为您提供了这一点,并减轻了一些映射的痛苦,但我没有亲自使用它们。

顺便说一句,如果您希望沿着领域驱动设计路径走下去并从它带来的干净隔离中受益,那么听起来您的对象层次结构可能会从被视为聚合中受益。

--

编辑:看起来eZ Components也有一个相当全功能的 PHP ORM解决方案,而Doctrine 2.0也在以这种方式形成。

--

编辑 2:对于您正在讨论的问题,我不会看 Propel 或 Creole。Creole 不是 ORM,而更像是一个类似于 PDO 的 DB 抽象层——该项目现在正式“死亡”。Propel 使用 ActiveRecord 模式,而不是 DataMapper 模式,因此您的域对象最终承担了更多的持久性责任,并且 AFAIK 它不包括工作单元设施。

于 2009-02-04T07:02:33.893 回答
0

如果您正在研究 ORM,请查看PropelCreole

于 2009-02-04T21:08:18.770 回答