2012-10-04 138 views
0

我有这两个类代表一些股票数据。他们没有任何行为。这些类具有一些常见的数据,如ExchangeSymbol,MySymbol和Time。你认为将这些抽象为基础类是一个好主意吗?请分享你的想法。OO设计继承

class SymbolData 
{ 
    public string ExchangeSymbol { get; set; } 
    public string MySymbol { get; set; } 
    public double Price { get; set; } 
    public int Volume { get; set; } 
    public string Time { get; set; } 
} 

class EquityQuoteData 
{ 
    public string ExchangeSymbol { get; set; } 
    public string MySymbol { get; set; } 
    public double AskPrice { get; set; } 
    public double BidPrice { get; set; } 
    public int AskVolumne { get; set; } 
    public int BidVolumne { get; set; } 
    public string Time { get; set; } 
} 

回答

0

我不会毫无理由地创建第三个(基)类。

你可以做从SymbolDataEquityQuoteData继承它们,因为它们大部分特性,尽管前者有AskPriceBidPrice代替Price,这是不是在子类中使用。

考虑实施一个共同的接口:

interface IData 
{ 
    string ExchangeSymbol { get; set; } 
    string MySymbol { get; set; } 
    string Time { get; set; } 
} 

然后:

class SymbolData : IData 
{ 
    public double Price { get; set; } 
    public int Volume { get; set; } 

    public string IData.ExchangeSymbol 
    { 
     get; set; 
    } 

    public string IData.MySymbol 
    { 
     get; set; 
    } 

    public string IData.Time 
    { 
     get; set; 
    } 
} 

class EquityQuoteData : IData 
{ 
    public double AskPrice { get; set; } 
    public double BidPrice { get; set; } 
    public int AskVolumne { get; set; } 
    public int BidVolumne { get; set; } 

    public string IData.ExchangeSymbol 
    { 
     get; set; 
    } 

    public string IData.MySymbol 
    { 
     get; set;    
    } 

    public string IData.Time 
    { 
     get; set; 
    } 
} 

总之,如果你不得不这样做:

public double AskPrice { get; set; } 
public double BidPrice { get; set; } 
public int AskVolumne { get; set; } 
public int BidVolumne { get; set; } 

这也是一个代码味道,所有这个前缀。

我会考虑把pricevolumne在一类,不管它的名字可能是,然后给你EquityQuoteData类两个属性(?) - AskBid - 无论是同一类型的。 SymbolData只会有一个。

0

如果ExchangeSymbol,MySymbol和Time有些相关,请将它们组合到可重用类中,并使其成为SymbolData和EquityQuoteData的成员(赞成合成 over inheritance)。 如果他们不是:不要!

记住:继承/多态主要是关于行为而不是数据。价值对象的继承可能会导致不必要的副作用 - 例如等于在这里玩得不好。

0

查看继承的一种方法是考虑has-ais-a的关系。

如果你有一些基类(数据是常见的两种名称)Data那么你就必须确保sentances“EquityQuoteData是(类型)Data”和“SymbolData是(类型)Data” 。

另一个方便的方式来思考它是否可以问:你是否可以用任何派生类型替换所有Data的实例并且仍然具有合理性?

例如:

我有很多的Data项目今天进行处理。

我有很多EquityQuoteData项目今天处理。

在你的情况下,我需要更多地了解每个类的角色,但我会说是的,你应该抽象出相关类的共同特征。

在一个不相关的说明中,基本上这个结构不是类。我会研究封装和其他OO设计原则(Google SOLID)