0

いくつかの株式データを表すこれらの2つのクラスがあります。それらには何の振る舞いもありません。これらのクラスには、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

has-a継承を見る 1 つの方法は、とのis-a関係について考えることです。

いくつかの基本クラスがある場合 (データは両方の名前に共通です) 、文が " is a (type of) " および " is a (type of) "Dataであることを確認する必要があります。EquityQuoteDataDataSymbolDataData

それについて考えるためのもう 1 つの便利な方法は、次のように尋ねることDataです。

例えば:

Data今日は処理するアイテムがたくさんありました。

EquityQuoteData今日は処理するアイテムがたくさんありました。

あなたの場合、各クラスの役割についてもっと知る必要がありますが、関連するクラスの共通機能を抽象化する必要があると思います。

無関係なことですが、これは基本的にクラスではなく構造体です。カプセル化やその他の OO 設計原則 (Google SOLID) を調べます。

于 2012-10-04T10:01:08.413 に答える
0

正当な理由もなく、3 番目の (基本) クラスを作成しません。

ほとんどのプロパティを共有EquityQuoteDataしているため、継承元にすることができますが、前者には子クラスで使用されていないの代わりにandがあります。SymbolDataAskPriceBidPricePrice

共通インターフェースの実装を検討してください。

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; }

それはコードの匂いでもあり、すべてこのプレフィックスです。

名前が何であれ、1 つのクラスにpriceand (?) を入れて、クラスに 2 つのプロパティ (および- 両方とも同じ型)を与えることを検討します。1つしかありません。volumneEquityQuoteDataAskBidSymbolData

于 2012-10-04T08:48:04.277 に答える
0

ExchangeSymbol、MySymbol、および Time がある程度関連している場合は、それらを再利用可能なクラスにグループ化し、SymbolData および EquityQuoteData のメンバーにします (継承よりも合成を優先します)。そうでない場合: しないでください。

覚えておいてください: 継承/ポリモーフィズムは主に動作に関するものであり、データに関するものではありません。値オブジェクトの継承は、望ましくない副作用を引き起こす可能性があります。たとえば、equals はここでは適切に機能しません。

于 2012-10-04T08:48:32.920 に答える