我有这两个代表一些股票数据的类。他们没有任何行为。这些类有一些常见的数据,如ExchangeSymbol,MySymbol和Time。你认为将这些抽象给基类是一个好主意吗?请分享您的想法。
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 :(得分:0)
我不会毫无理由地创建第三个(基础)类。
您可以EquityQuoteData
继承SymbolData
,因为它们共享大多数属性,但前者有AskPrice
和BidPrice
代替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; }
无论如何,如果你必须这样做:
price
这也是代码气味,所有这些前缀。
我会考虑将volumne
和EquityQuoteData
(?)放在一个类中,无论名称是什么,然后为Ask
类提供两个属性 - Bid
和SymbolData
- 两者都属于同一类型。 {{1}}只会有一个。
答案 1 :(得分:0)
如果ExchangeSymbol,MySymbol和Time有些相关,请将它们分组到一个可重用的类中,并使其成为SymbolData和EquityQuoteData的成员(支持组合而不是继承)。 如果不是:不要!
请记住:继承/多态主要是关于行为而不是关于数据。值对象中的继承可能会导致不必要的副作用 - 例如等于在这里玩得不好。
答案 2 :(得分:0)
查看继承的一种方法是考虑has-a
和is-a
关系。
如果您有一些基类(数据对两个名称都是通用的)Data
那么您必须确保发送“EquityQuoteData
是(类型)Data
”并且“SymbolData
是(类型)Data
”。
考虑它的另一个方便的方法是问:你可以用任何派生类型替换所有Data
的实例,并且仍然有意义吗?
例如:
我今天要处理很多Data
个项目。
我今天要处理很多EquityQuoteData
个项目。
在你的情况下,我需要更多地了解每个类的角色,但我想说可能是的,你应该抽象出相关类的共同特征。
在一个不相关的注释中,这基本上是一个结构而不是一个类。我会研究封装和其他OO设计原则(Google SOLID)