我的情况是需要使用存储功能进行抽象,并且需要多个数据库适配器。
但是,我依赖外部供应商,他们的库也有多个数据库适配器。
我想创建一个单独的适配器,它是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或重新实现函数名称,并简单地调用子对象?哪一个满足接口约束?
还有一个问题是,如果不同的适配器具有相同的功能名称会产生冲突,那么如何处理呢?适配器模式是否有效?