我有一种情况,我需要使用存储功能进行抽象,并拥有多个数据库适配器。
但是,我依赖外部供应商,他们的库也有多个数据库适配器。
我想创建一个单一的适配器,它是 MySQL,它从外部供应商那里继承了相应 MySQL 适配器的功能。我可以将此适配器依赖注入到我自己的库和依赖适配器运行的外部库中。
当然 PHP 没有多重继承,所以我做了一些研究并提出了组合。
将多个数据库适配器组合成一个数据库适配器是一个好习惯吗?此外,如果这个组合对象实现了一个从外部供应商的相应接口扩展而来的接口,它会起作用吗?
例如想象有:
External1\StorageInterface
External1\MySQLAdapter
External2\StorageInterface
External2\MySQLAdapter
Internal\StorageInterface
Internal\MySQLAdapter
Now: Internal\StorageInterface extends External1\StorageInterface, External2\StorageInterface
Then: Internal\MySQLAdapter implements Internal\StorageInterface
Then: Internal\MySQLAdapter compositions External1\MySQLAdapter and External2\MySQLAdapter
顺便说一句,合成应该如何进行?通过 __call 或重新实现函数名称,并简单地调用子对象?哪一个满足接口约束?
另一个问题是,如果不同的适配器具有相同的函数名称会产生冲突,该如何处理?适配器模式会起作用吗?