使用PHP混乱检测器https://phpmd.org,我发现了一条规则,该规则告诉我重构一个有15个以上孩子的类。
这个问题中的我的类是存储库的基类,实现了每个存储库必须具有的各种方法。
我的问题如下。
我一直认为,在面向对象编程中继承的最大优点是避免代码重复,所以如果一个类被许多孩子使用,怎么可能会有问题?
规则如下:
<rule name="NumberOfChildren"
since="0.2"
message = "The {0} {1} has {2} children. Consider to rebalance this class hierarchy to keep number of children under {3}."
class="PHPMD\Rule\Design\NumberOfChildren"
externalInfoUrl="https://phpmd.org/rules/design.html#numberofchildren">
<description>
</description>
<priority>2</priority>
<properties>
<property name="minimum" value="15" description="Maximum number of acceptable child classes." />
</properties>
<example />
</rule>
我非常感谢您为澄清这一疑问提供帮助。
答案 0 :(得分:-2)
使用特征代替类。特质没有限制 就像:
trait ParentTrait {...}
因此,您可以在所有类中使用它
class child {
use ParentTrait;
}
答案 1 :(得分:-2)
根据我使用嗅探器工具的经验,它更多是气味而不是错误。我觉得您所做的设计选择完全是正确的方法,而Trait或任何其他解决方案更像是一种hack。
因此,请充分考虑它告诉您的所有内容,对其进行分析,如果仍然觉得它是正确的方法,请予以保留。
气味可以是,如果您使一般性的东西得到扩展,它可以用于许多不同的领域。这样一来,您应该设计出自己的出路。
答案 2 :(得分:-3)
继承也会出现问题,很多继承会导致对底层代码的大量依赖,假设您有两个类是父类的子类,您在父类中添加了功能,但是您犯了一个错误,并且您将制止所有随着阶层的增加,您上课的机会和发生的机会也会增加。通常,框架通过组合/聚合和依赖注入来解决它。