0

我是 .net 和 OOP 的新手,我一直难以弄清楚我应该如何为我正在构建的房地产网站创建类。

在我的数据库中,我有一个包含各种字段的“House”表。

有时,房子可能有花园、车库、游泳池等,所以我有单独的表来存储每个表的数据,所有这些都连接到“房子”表的唯一标识符。

在我的代码中,我创建了一个“House”类,但是如何为其他表定义类?

我显然可以有一个“花园”类,它将继承“房子”类,但是,根据访问者的选择,我有时可能需要显示(例如)房子、花园和车库的数据,我可以'不知道这种方法是如何工作的。我可以只定义一个大类来定义房子、花园、车库等,并在不需要的时候留下很多空值,但我很确定这不是正确的方法!

我整天都在为此苦苦挣扎,所以非常感谢任何信息!

4

1 回答 1

3

房屋类可能具有一系列特征。

您基本上可以创建一个名为“Feature”的抽象基类或一个名为“IFeature”的接口,并将其继承/实现到旨在成为特性的类(即Garden)。

然后您需要做的就是在House名为“Features”的类中创建一个集合。
这是 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”的属性,并带有一个 get 访问器,如Garden上面的Pool类和下面的类:

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类应该有一个集合 ofIFeature而不是Poolor Garden

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 回答