子类或不子类

pou*_*enc 5 oop subclass

我有三个对象; 行动,问题和风险.这些都包含一系列公共变量/属性(例如:描述,标题,截止日期,提升等)和一些特定字段(风险有概率).问题是:

  1. 我应该创建3个单独的类Action,Risk和Issue,每个类都包含重复字段.

  2. 创建包含这些字段和操作的父类"Abstract_Item",然后使用Action,Risk和Issue子类Abstract_Item.这将坚持DRY委托人.

Ara*_*ram 5

我的观点

让我们说,如果你使用了继承.在一段时间内,您拥有仅对"行动"和" 问题"而非" 风险"共有的新属性.你将如何处理?如果你把它们放在父母之下,那么Risk就会继承那些无关紧要的东西(Liskov Substituon Principle knocking?).如果你把它分别放在Action和Risk中,那么你就会破坏DRY,这是你开始继承的最初原因.点是Inhertence重复使用是坏事.如果没有"是-a"那么最好不要使用它,当你有疑问时,就没有真正的"是-a".

我的偏好

还有其他实现DRY的方法,如下面的示例代码所示.通过添加新属性,我将成为另一个Common2,如果它们不适用于所有3个类,则添加新行为是新的CommonBehavior2 ; 如果它们只是改变现有的CommonCommonBehavior

public class Common implements CommonBehavior
{
    String Description;
    String title;

    public void f() {}
}

public interface CommonBehavior
{
    void f();
}

public class Action implements CommonBehavior
{
    private Common delegate;

    public void f()
    {
        delegate.f();
    }
}
Run Code Online (Sandbox Code Playgroud)

另外用另一个实际示例设计模式来查看我对类似问题的答案,以添加新类


Ale*_*ler 2

是的,坚持 DRY 通常是一个非常好的主意,除非这些类有非常非常不同的用途(即苹果和汽车都可能是红色的,但我仍然不会从名为 的基类派生它们ProbablyRed)。然而,就您而言,我肯定会选择基类,因为您描述的实现(、、ActionIssue似乎Risk都是某种具有非常相似语义的业务规则。