【问题标题】:PHP MVC: Multiple databases, multiple data mappers?PHP MVC:多个数据库,多个数据映射器?
【发布时间】:2017-10-25 07:21:17
【问题描述】:

我正在处理我的 HMVC 项目。

现在我正在使用数据映射器在模型(域对象)和 MySQL 数据库之间移动数据。每个映射器都接收一个 MySQL 适配器作为依赖项。注入的适配器接收一个 PDO 实例(一个数据库连接)作为依赖项,并在数据库上运行 sql 查询。

我还使用依赖注入容器 (Auryn)。

我希望能够同时从不同类型的存储(MySQL 数据库、PostgreSQL 数据库、XML 提要等)中检索数据。

假设,我想从 PostgreSQL 数据库 中检索 User 数据(通过使用 PDO 数据访问抽象)来更改它,并将其保存到另一台服务器上的 MySQL 数据库(通过使用 mysqli 数据访问抽象)。因此,两种数据库类型都会有不同的数据访问调用。

我的问题是:

我是否应该为每种存储类型创建不同的映射器,例如

UserMapperPgsql(PgsqlAdapter $adapter) 
UserMapperMySql(MySqlAdapter $adapter)

,或者我应该只创建一个具有更多适配器(每种数据类型一个)作为依赖项的映射器,如下所示?

UserMapper(PgsqlAdapter $adapter1, MySqlAdapter $adapter2, ...)

谢谢大家的建议!

【问题讨论】:

  • @tereško 因为我想证明,对不同的存储会有不同的数据访问调用。

标签: php oop design-patterns model-view-controller datamapper


【解决方案1】:

你有一个多么奇怪的项目。

无论如何。我会为单独的存储介质使用两个单独的映射器。因为试图在映射器中处理这些适配器可能会非常复杂。

也就是说,根据持久性逻辑最终的复杂程度,您可能会受益于查找 repositories 作为简化 API 的方法,这会暴露于您的“应用程序逻辑”实际完成的位置。

【讨论】:

  • 感谢您的回答。是的,这似乎很奇怪......但事实并非如此:)我知道,我在我的问题中提出了一个不太好的例子。到目前为止,我一直在使用工厂。因为我现在有一个DIC,我想全部改变。我已经实现了存储库,但为了简单起见,我只是介绍了数据映射器的案例。如果您知道我使用存储库,您能否告诉我,您的答案是否会有所不同?
  • @aendeerei 一般建议不会改变,但最好为您的项目使用 Symfony 的独立 DIC compnent,因为它是基于配置的(这将有助于您的不同连接和消除对“适配器黑客”的需要)并具有“默认共享”行为。
  • 我明白了。谢谢。我很感激你花时间!我去看看。
猜你喜欢
  • 2012-11-30
  • 2012-10-03
  • 1970-01-01
  • 2016-10-10
  • 2023-02-23
  • 2014-01-29
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多