2009-02-04 90 views
7

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

我只是想知道这是不是一个好主意,或者如果这是不好的做法等?

我通常使用几个在层次结构中链接在一起的对象,而且现在不得不手动分析每个对象到它的映射器,这是非常乏味的,所以试图找出一个更好的解决方案。

感谢, 杰克

+0

伟大的问题,希望你得到一些体面的答案。 – Asciant 2009-02-04 02:17:16

回答

3

肯定听起来像是一个好主意,我。你所做的与Unit Of Work模式类似,旨在跟踪您对映射对象所做的更改并在完成后跟踪提交(通常为单个事务)。

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

顺便说一句,如果您希望沿着Domain Driven Design的路径走下去,并从它带来的清晰隔离中受益,听起来好像您的对象层次结构可能受益于被视为Aggregates

-

编辑:它看起来也像是eZ Components具有相当功能齐全的PHP ORM解决方案,并Doctrine 2.0太塑造了这种方式。

-

编辑2:我不会看看行走或克里奥尔语的问题,你都在讨论。克里奥尔不是一个ORM,而更像是一个类似于PDO的数据库抽象层 - 而且该项目现在正式成为“死亡”。 Propel使用ActiveRecord模式,而不是DataMapper模式,所以你的域对象最终具有更多的持久性责任,而AFAIK它不包含Unit Of Work设施。

+0

嗨,感谢您的信息,我一定会考虑您提到的项目。 – 2009-02-04 09:03:05