我正在使用PHP构建应用程序,我正在使用数据映射器模式进行数据库访问。我正在考虑使用Observer模式让我的所有映射器观察他们创建的实体,这样他们就可以自动将任何更改保存回数据库,而不必手动解析它们。
我只是想知道这是不是一个好主意,或者这是不好的做法等等。
我通常使用一些在层次结构中链接在一起的对象,并且此时必须手动将每个对象解析为它的映射器,这是相当繁琐的,所以只是试图找到一个更好的解决方案。
谢谢, 千斤顶
答案 0 :(得分:3)
对我来说绝对听起来不错。您所做的与Unit Of Work模式类似,旨在跟踪您对映射对象所做的更改并在完成后提交(通常作为单个事务)。
我相信像Outlet和Repose这样的项目会在PHP中为您提供此功能,并减轻一些映射的痛苦,但我并未亲自使用它们。
顺便说一句,如果您希望沿着Aggregates路径前进并从其带来的干净隔离中受益,那么您的对象层次结构可能会因为被视为Domain Driven Design而受益。
-
编辑:看起来eZ Components还有一个功能齐全的PHP ORM解决方案,而Doctrine 2.0也正在形成这种方式。
-
编辑2:我不会查看您正在讨论的问题的Propel或Creole。克里奥尔语不是一个ORM,而是更像是一个类似于PDO的数据库抽象层 - 该项目现在正式“死”。 Propel使用ActiveRecord模式,而不是DataMapper模式,因此您的域对象最终会有更多的持久性责任,而AFAIK则不包含工作单元工具。
答案 1 :(得分:0)