0

私は .net と OOP を初めて使用し、構築中のプロパティ サイトのクラスをどのように作成すればよいかを理解するのに苦労しています。

私のデータベースには、さまざまなフィールドを持つ「House」テーブルがあります。

家には庭、ガレージ、プールなどがある場合があるため、これらのそれぞれのデータを格納する個別のテーブルがあり、すべて「家」テーブルの一意の識別子に接続されています。

私のコードでは、「House」クラスを作成しましたが、他のテーブルのクラスを定義するにはどうすればよいですか?

もちろん、「House」クラスを継承する「Garden」クラスを作成することもできますが、訪問者の選択によっては、(たとえば) 家、庭、ガレージに関するデータを表示する必要がある場合があります。この方法がどのように機能するかわかりません。家、庭、ガレージなどを定義する 1 つの大きなクラスを作成し、何かが不要な場合に多くの null を残すこともできますが、それは正しいアプローチではないと確信しています!

私はこれに一日中苦労しているので、どんな情報でも大歓迎です!

4

1 に答える 1

3

ハウスクラスには、機能のコレクションがある場合があります。

基本的に、「Feature」と呼ばれる抽象基本クラスまたは「IFeature」と呼ばれるインターフェースを作成し、それを機能(つまりGarden)となるクラスに継承/実装することができます。

House次に、 「機能」というクラスでコレクションを作成するだけです。
C#のインターフェイスの例を次に示します。

interface IFeature
{
    // Properties or methods you want all the features to have.

    decimal Price { get; }
}

フィーチャクラスはIFeatureインターフェイスを実装する必要があります。

class Garden : IFeature
{
    // This property is needed to implement IFeature interface.
    public decimal Price { get; private set; }

    public Garden(decimal price) { Price = price; }
}

を実装するIFeatureには、クラスにdecimal「Price」というプロパティがGardenあり、上記のクラスやPool以下のクラスのようなgetアクセサーが必要です。

class Pool : IFeature
{
    public decimal Price { get; private set; }
    public float Depth { get; private set; }

    public Pool(decimal price, float depth) { Price = price; Depth = depth; }
}

Houseクラスには、またはのIFeature代わりにのコレクションが必要です。PoolGarden

class House
{
    public List<IFeature> Features { get; private set; }

    public House()
    {
        Features = new List<IFeature>();
    }
}

次に、次のような機能を家に追加できます。

House h = new House();

h.Features.Add(new Garden(6248.12m));
h.Features.Add(new Pool(4830.24m, 10.4f));

そして、LINQを使用すると、次のことができます。

// Check whether the house has a garden:
h.Features.Any(f => f is Garden);

// Get the total cost of features.
h.Features.Sum(f => f.Price);

// Get the pools that are deeper than 5 feet.
h.Features.OfType<Pool>().Where(p => p.Depth > 5f);

// etc.

インターフェイスに関する詳細情報
LINQに関する詳細情報

于 2012-08-25T20:39:12.363 に答える