我正在用 PHP 编写一个必须写入三个持久层的系统:
- 一项网络服务
- 两个数据库(一个mysql一个mssql)
原因是遗留系统,无法更改。
我想使用 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
- $_mapper 是一个数组/集合,它遍历它们在每个上调用 create
- $_mapper 实际上是一个容器对象,它充当进一步的代理并在每个对象上调用 create
这些解决方案中的每一个都让我觉得有些错误,并且希望任何可能适合此的反馈/公认的设计模式。