构建C#类的最佳方法

时间:2013-06-30 18:21:11

标签: c# class object-model

我有以下课程;

public class Hotel
{
   public int HotelId {get; set;}
   public string Name {get; set;}
   public string Address {get; set;}
   public string City{get; set;}
}

public class District
{
   public int DistrictId {get; set;}
   public string Name {get; set;}
}

然后我需要一个可以同时包含DistrictId和HotelId的类,所以我想创建一个类如下

public class HotelDistrict
{
   public int DistrictId {get; set;}
   public int HotelId {get; set;}
}

这是正确的方法吗?或者他们是更好的选择?

5 个答案:

答案 0 :(得分:7)

这看起来很像数据库表设计。在OOP世界中,您通常会添加对类的引用,而不仅仅是对ID。

像这样的东西

public class HotelDistrict
{
   public Distric District {get; set;}
   public Hotel Hotel {get; set;}
}

没有银弹,所以这个规则有例外,但通常你想避免创建对数据库表有如此多气味的类。

答案 1 :(得分:7)

酒店和区有many to one relationship。因此,酒店应该映射到相应的区域 -

public class Hotel
{
   public int HotelId {get; set;}
   public string Name {get; set;}
   public string Address {get; set;}
   public string City{get; set;}
   public int DistrictId{get; set;}
}

答案 2 :(得分:0)

您只需在District或[{1}} Hotel中存储对List<Hotel>的引用即可。通常,除非您正在处理编写数据库模型,否则不应保留您正在执行的唯一标识符。如果这是一个数据库模型,那么您的解决方案很好,假设您需要支持多个地区的酒店。

答案 3 :(得分:0)

出于任何原因,如果你真的需要采用原始HotelDistrict方式,实际上你不需要新的类,你可以使用Tuple<Hotel, District>来存储对,以及一个列表那些元组(例如List<Tuple<Hote, District>>)存储这些对的列表。

但正如Rohit Vats所说,有一个* -1关系,所以最好将该区域作为一个字段引用,所以如果你没有使用原始方法的具体原因,我建议他的方法。

答案 4 :(得分:0)

作为其他优秀答案的替代方案,如果您更喜欢具有松散耦合对象的更明确的域模型,也可以执行以下操作。 (我假设每个酒店一次只能在一个区内。)

class Hotel
    int HotelId
    int DistrictId
    ...

class District
    int DistrictId
    ...

class HotelsInDistrict
    int DistrictId
    List<int> HotelIds

好处:它松散耦合,你不需要摆弄像巨大的物体图,懒惰/急切的装载和东西等痛苦的东西。它与实际业务领域不同,而不仅仅是数据容器。它松散耦合,可以轻松修改。

缺点:它不容易映射到yourt数据库表。但是,如果它不仅仅是一组数据导向的“类”,而不仅仅是表的表示,那么它就不会有真正的对象模型。

那就是说,我真的向所有对对象建模感兴趣的人推荐一本书: