PHP DataMapper具有多个持久层
我正在用
PHP编写一个系统,它必须写入三个持久层:
>一个Web服务 原因是遗留系统无法更改. 我想使用DataMapper模式,我正在尝试建立实现我想要的最佳方式.我有一个如下界面: <?php $service = $factory->getService()->create($entity); ?> 为简洁起见,下面是一些人为的和减少的代码: <?php class Post extends AbstractService { protected $_mapper; public function create(Entity $post) { return $this->_mapper->create($post); } } class AbstractMapper { protected $_persistence; public function create(Entity $entity) { $data = $this->_prepareForPersistence($entity); return $this->_persistence->create($data); } } ?> 我的问题是,因为有三个持久层,因此每个都可能需要三个映射器.我想要一个干净的设计模式灵感的界面,使这项工作. 我认为它有三个选择: >将三个映射器注入服务并在每个映射上调用create 对于这些解决方案中的每一个解决方案都是错误的,并且会感谢任何可能适合这种情况的反馈/认可的设计模式.
我不得不解决类似的问题,但很多年前在PEAR DB时代.在该特定情况下,需要跨多个数据库复制数据.
我们没有不同数据库具有不同映射的问题,所以它更简单一些. 我们所做的是对DB类进行外观并覆盖getResult函数(或者它所调用的任何函数).然后,这个函数分析了SQL,如果它是一个读取 – 它会将它发送给一个支持的,如果它是一个写,它会将它发送给所有人. 对于利用率很高的网站来说,这实际上非常有效. 从这个背景来看,我建议完全介绍所有持久性操作.完成后,实现细节不太相关,可以随时更改. 从这个角度来看,您的任何实现想法似乎都是一种合理的方法.不过,你会想到各种各样的事情. >如果其中一个后端发生错误怎么办? 还有另一种方法可以解决这个问题.那就是使用存储过程.如果您有主数据库服务器,则可以编写一个触发器,在提交(或其周围)连接到另一个数据库并同步数据时. 如果数据更新不需要立即进行,则可以让主数据库记录更改,并使另一个脚本定期将此数据“提供”到另一个系统中.同样,需要考虑错误问题. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |