继承设计理念

时间:2017-05-31 09:39:57

标签: oop design-patterns

我有两个不相关的课程

public class ManagedType{
    private string id;
    private string name;
    private string description;
    private string version;
    private string Properties;
   private List<string> baseTypesl
}

public class OtherClass{
    private string id;
    private string name;
    private string description;
    private string target;
    private string sources;
   private List<string> relationships;
}

因此,我建议将id,name,description抽象到一个新的基类中,并让它扩展它。

我的观点是,由于它们不相关,我们不应该这样做。此外,我们永远不应该只为属性扩展类(除非它们是相关的),但仅限于常见行为(这里没有)。请让我知道您对此的看法。

2 个答案:

答案 0 :(得分:2)

你可能以前听过这个:“继承代表'是一种'关系'。

要决定是否使用继承,只需问问自己:

  

ManagedTypeOtherClass是同一类吗?

如果您的答案为“是”,请创建一个共同的超类。

就这么简单。你还必须考虑在这里使用继承是否会使你的代码以任何方式“更好”。我现在想不出这样的情况,但是如果你看到继承是否存在根本不会影响你的其他代码片段,那么继承可能是不必要的。如果你使用了继承并想到“哦,现在继承,我可以像这样简化我的代码!”,那么把它放在那里可能会很好。

  

此外,我们不应该仅为属性扩展类(除非它们是相关的),但仅适用于常见行为(这里没有)。

我以前从未听过这样的话。我认为这在很大程度上取决于你所处的具体情况。

答案 1 :(得分:0)

您的理解是正确的。除非他们不属于'is-a'关系,否则将他们置于一个超级阶层之下是没有意义的。

但是,这种关系只有从功能角度来看才会出现。如果您正在构建一个服务类,如Serializable,IEnumerable等,您可能会考虑为一个接口提供3个属性(我可以看到ID,名称和描述)很常见。仅当您从技术服务角度看到此情况时,此选项才适用。但是,如果从功能角度看,你不应该带抽象类。

例如,

public interface Iloggable 
{   
    public string id {get; set;}   public
    string name {get; set;}   
    public string description {get; set;} 
}

public class ManagedType: Iloggable 
{   
    private string _id, _name,_description;   
    public string id   
    { 
        get 
            {return _id;} 
        set {_id = value; } 
    }   
    ..... 
}