我的观点
让我们说,如果你使用了继承.在一段时间内,您拥有仅对"行动"和" 问题"而非" 风险"共有的新属性.你将如何处理?如果你把它们放在父母之下,那么Risk就会继承那些无关紧要的东西(Liskov Substituon Principle knocking?).如果你把它分别放在Action和Risk中,那么你就会破坏DRY,这是你开始继承的最初原因.点是Inhertence重复使用是坏事.如果没有"是-a"那么最好不要使用它,当你有疑问时,就没有真正的"是-a".
我的偏好
还有其他实现DRY的方法,如下面的示例代码所示.通过添加新属性,我将成为另一个Common2,如果它们不适用于所有3个类,则添加新行为是新的CommonBehavior2 ; 如果它们只是改变现有的Common和CommonBehavior
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)
另外用另一个实际示例设计模式来查看我对类似问题的答案,以添加新类
是的,坚持 DRY 通常是一个非常好的主意,除非这些类有非常非常不同的用途(即苹果和汽车都可能是红色的,但我仍然不会从名为 的基类派生它们ProbablyRed
)。然而,就您而言,我肯定会选择基类,因为您描述的实现(、、Action
)Issue
似乎Risk
都是某种具有非常相似语义的业务规则。
归档时间: |
|
查看次数: |
828 次 |
最近记录: |