可接受的最大子班数

时间:2019-02-08 11:25:04

标签: php laravel oop

使用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>

我非常感谢您为澄清这一疑问提供帮助。

3 个答案:

答案 0 :(得分:-2)

使用特征代替类。特质没有限制 就像:

trait ParentTrait {...}

因此,您可以在所有类中使用它

  class child {
     use ParentTrait;
  }

答案 1 :(得分:-2)

根据我使用嗅探器工具的经验,它更多是气味而不是错误。我觉得您所做的设计选择完全是正确的方法,而Trait或任何其他解决方案更像是一种hack。

因此,请充分考虑它告诉您的所有内容,对其进行分析,如果仍然觉得它是正确的方法,请予以保留。

气味可以是,如果您使一般性的东西得到扩展,它可以用于许多不同的领域。这样一来,您应该设计出自己的出路。

答案 2 :(得分:-3)

继承也会出现问题,很多继承会导致对底层代码的大量依赖,假设您有两个类是父类的子类,您在父类中添加了功能,但是您犯了一个错误,并且您将制止所有随着阶层的增加,您上课的机会和发生的机会也会增加。通常,框架通过组合/聚合和依赖注入来解决它。