PHP继承:不要重复自己与一个类适合所有

时间:2014-02-22 11:58:15

标签: php oop inheritance traits

我有一组继承功能的类,具体取决于它们的功能。它们是屏幕元素:

一些例子是:
ScreenElement_Text_Area extends ScreenElement_Text extends ScreenElement ScreenElement_Text_Text extends ScreenElement_Text extends ScreenElement ScreenElement_Date_ddmmyyyyhhmm extends ScreenElement_Date extends ScreenElement

继承使我能够指定不同的行为(HTML代码,样式,验证)而无需重复自己。琐碎的例子:

ScreenElement::getTitle()
ScreenElement::getValue()
ScreenElement_Text::getMaxChars()
ScreenElement_Text_Money::getCurrency()

问题是这些类现在被用于不同于它们最初预期的上下文中(它描述了表单的一部分):例如,作为表中的列或描述出现在日历中的信息。每个上下文都为其他用法不需要​​的类添加方法和属性。例如:

在表格中使用时:getFormElement()
在表格中使用时:calculateColumnWidth()
在日历中使用时:getStartTime()

我现在问自己如何减少日益增加的复杂性!我喜欢更小,更专业的课程,但不想增加课程数量,也不想重复代码,但我无法理解这一点。

1 个答案:

答案 0 :(得分:2)

避免操纵过于复杂的结构的解决方案可能是使用Facade pattern。也就是说,例如:添加接口IScreenElement_Text_Area_FormIScreenElement_Text_Area_TableIScreenElement_Text_Area_Calendar

ScreenElement_Text_Area实现这3个接口,但只在给定的上下文中使用最相关的接口。

这样,表单只会通过ScreenElement_Text_Area操纵IScreenElement_Text_Area_Form,因此它只能访问getFormElement(),而不能访问其他两种方法。

话虽如此,这只是一种可能的解决方案。例如,您也可以查看composition over inheritance