【问题标题】:is there an opposite to an abstract class?有没有抽象类的对立面?
【发布时间】:2012-07-11 09:09:24
【问题描述】:

我使用的是我自己开发的 PHP 框架,它主要基于 pear 和 Zend 的组件,但最近 Composer 上出现了一些更好的组件

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

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

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

我问是因为我一直在使用 pears Net/URL/Mapper,这还不错,但我发现了一些也可以处理调度的东西,并且正在积极开发中。我也相信这种情况会一次又一次地出现。

【问题讨论】:

  • 在我看来,您在理解接口的使用方面遇到了问题。

标签: php oop interface abstract-class


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Composition我以前用过,不知道叫composition。立面设计模式是我一直在寻找的。谢谢。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2014-10-30
    • 2023-03-31
    • 2017-04-10
    相关资源
    最近更新 更多