php - 数据映射器+观察者模式

标签 php datamapper observer-pattern

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

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

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

谢谢, jack

最佳答案

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

我相信像 Outlet 这样的项目和 Repose在 PHP 中为您提供此功能并减轻一些映射痛苦,但我没有亲自使用过它们。

顺便说一句,听起来您的对象层次结构可能会受益于被视为 Aggregates如果你想下Domain Driven Design路径并从它带来的干净隔离中受益。

--

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

--

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

关于php - 数据映射器+观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509566/

相关文章:

magento - 产品删除观察者

activerecord - C# .NET 中的数据映射器问题

ruby - Sinatra 和 DataMapper 协会

swift - Swift 中的一组弱观察者

php - 为什么后自增运算符 ($j++) 永远不会将 $j 从 0 改变?

php - laravel undefined index session

php - 如果只有一行,SQL 拒绝删除行

php - 剥离 php 变量,用破折号替换空格

ruby-on-rails - 使用 DataMapper get 在 Rails3 Controller 中处理 404 的最佳方法

ios - 如何将通知传递给 Swift 3 中观察者调用的方法