Oop 面向对象设计继承
我有两个类,它们代表一些股票数据。他们身上没有任何行为。这些类有一些公共数据,如ExchangeSymbol、MySymbol和Time。你认为把这些抽象成基类是个好主意吗?。请分享你的想法Oop 面向对象设计继承,oop,inheritance,Oop,Inheritance,我有两个类,它们代表一些股票数据。他们身上没有任何行为。这些类有一些公共数据,如ExchangeSymbol、MySymbol和Time。你认为把这些抽象成基类是个好主意吗?。请分享你的想法 class SymbolData { public string ExchangeSymbol { get; set; } public string MySymbol { get; set; } public double Price { get; set; } publi
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; }
}
我不会无缘无故地创建第三个(基本)类
您可以使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; }
这也是一种代码味道,所有这些前缀
< P> >我想考虑在一个类中,不管它的名字是什么,把代码< >价格> />代码> VuluMe</代码>(?),然后给出你的<代码>等式QuoTeDATAs>代码>类两个属性-<代码> ASK < /代码>和<代码>投标> /代码>两种相同的类型。code>SymbolData只有一个。如果ExchangeSymbol、MySymbol和Time有某种关联,请将它们分组到一个可重用类中,并使其成为SymbolData和EquityQuoteData的成员(支持组合而不是继承)如果不是:不要强>
请记住:继承/多态性主要与行为有关,而与数据无关。值对象中的继承可能会产生不必要的副作用-例如,equals在这里不起作用。看待继承的一种方法是考虑
具有-a
和是-a
关系
如果您有一些基类(数据对两个名称都是公共的)Data
,那么您必须确保语句“EquityQuoteData
是(类型的)Data
”和“SymbolData
是(类型的)Data
”
思考这个问题的另一个简便方法是问:您是否可以用任何派生类型替换scentance中数据的所有实例,并且仍然使scentance有意义
例如:
我今天有很多数据要处理
我今天有很多EquityQuoteData
项目要处理
在您的情况下,我需要更多地了解每个类的角色,但我可能会说,是的,您应该抽象出相关类的共同特征
另一方面,这基本上是一个结构,而不是一个类。我将研究封装和其他OO设计原则(GoogleSolid)