0

我有这两个代表一些股票数据的类。他们没有任何行为。这些类有一些公共数据,如 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; }
}
4

3 回答 3

0

我不会无缘无故地创建第三个(基)类。

您可以进行EquityQuoteData继承,SymbolData因为它们共享大多数属性,尽管前者具有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; }

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

我会考虑将priceand volumne(?) 放在一个类中,不管它的名字是什么,然后给你的EquityQuoteData类两个属性 -Ask并且Bid- 两者都是相同的类型。SymbolData只会有一个。

于 2012-10-04T08:48:04.277 回答
0

如果 ExchangeSymbol、MySymbol 和 Time 有点相关,请将它们分组到一个可重用的类中,并使其成为 SymbolData 和 EquityQuoteData 的成员(优先组合而不是继承)。如果他们不是:不要!

记住:继承/多态主要是关于行为而不是数据。值对象中的继承可能会导致不希望的副作用——例如,equals 在这里表现不佳。

于 2012-10-04T08:48:32.920 回答
0

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

如果您有一些基类(数据对两个名称都是通用的),Data那么您必须确保句子“EquityQuoteData是(类型)Data”和“SymbolData是(类型)Data”。

另一种考虑它的方便方法是问:你Data能用任何派生类型替换香味中的所有实例,并且仍然让香味有意义吗?

例如:

我今天有很多Data东西要处理。

我今天有很多EquityQuoteData东西要处理。

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

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

于 2012-10-04T10:01:08.413 回答