是否与抽象类相反?

时间:2012-07-11 17:14:53

标签: php oop interface abstract-class

我正在使用我自己的本土PHP框架,它主要基于来自pear和Zend的组件,但最近有一些更好的组件出现在Composer

随着我的应用程序的增长,在组件之间切换变得更加困难,我想知道是否有一种方法可以设计不同的程序。在某种程度上,我可以使用与抽象类相反的组件。

我认为应该有一种方法让我创建自己的类,然后只是挂钩到pear或zend并使用这些类,就像它们使用接口或抽象类一样。当然他们会做实际的工作而我只是链接到他们。

假设我一直在使用pear Config / Lite,它只能用于ini和数组文件,现在我想切换到pear config或Zend config以获得将数据保存在数据库中的好处,那么应该是一种简单的切换方式,无需更改我的所有代码,因为它们实现的是完全相同的东西。

我在问,因为我一直在使用梨Net / URL / Mapper,这不错,但我找到了一些也会负责调度,并且正在积极开发。我也相信这种情况会一次又一次地出现。

2 个答案:

答案 0 :(得分:2)

您想要寻找类似于立面设计模式的东西,或者只是使用委托/组合。但要注意,使用类似外观的东西会在添加抽象层时导致许多不必要的复杂性。我建议你阅读一些php设计模式,特别是对象的委托/组合,以了解它可能适合你的情况。

答案 1 :(得分:1)

您应该为此IMO使用合成。让库中的类公开它们自己的公共接口,其余的代码依赖于它。如果您将组件的基础从PEAR更改为Zend,请确保所有原始公共方法仍然遵循以前的版本,您应该是金色的。如果您愿意,可以使用interface关键字将这些接口形式化,但这超出了本答案的范围;)