构造C#类的最佳方式
本文关键字:最佳 方式 构造 | 更新日期: 2023-09-27 18:20:32
我有以下类;
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;}
}
这是正确的路吗?或者他们是更好的选择?
这看起来很像数据库表的设计。在OOP世界中,您通常会添加对类的引用,而不仅仅是对id的引用。
像这样的
public class HotelDistrict
{
public Distric District {get; set;}
public Hotel Hotel {get; set;}
}
没有什么灵丹妙药,所以这个规则也有例外,但通常情况下,您希望避免创建对数据库表来说味道太重的类。
酒店和地区有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;}
}
您可以简单地在Hotel
中存储对District
的引用,或者在District
中存储List<Hotel>
。通常情况下,除非您正在编写数据库模型,否则不应该像现在这样保留唯一标识符。如果这是一个数据库模型,那么假设您需要支持多个地区的酒店,那么您的解决方案就可以了。
无论出于何种原因,如果您真的需要使用原始的HotelDistrict
方式,实际上不需要新的类,您只需要使用Tuple<Hotel, District>
来存储对,并使用这些元组的列表(如List<Tuple<Hote, District>>
)来存储这些对的列表。
但正如Rohit Vats所说,这是一种*1的关系,所以最好将该地区作为一个领域,所以如果你没有使用原始方法的具体原因,我建议你使用他的方法。
作为其他优秀答案的替代方案,如果您喜欢具有松散耦合对象的更显式的域模型,也可以执行以下操作。(我认为每一家酒店一次只能在一个地区。)
class Hotel
int HotelId
int DistrictId
...
class District
int DistrictId
...
class HotelsInDistrict
int DistrictId
List<int> HotelIds
好处是:它是松散耦合的,你不需要摆弄巨大的对象图、懒惰/渴望加载之类的痛苦的东西。它沿着实际业务领域的路线,而不仅仅是数据容器。它是松散耦合的,可以很容易地进行修改。
缺点是:它不容易映射到您的t数据库表。但是,如果真正的对象模型只不过是一堆面向数据的"类",而这些"类"只是表的表示,那么它就无法做到这一点。
也就是说,我真的向所有对物体建模感兴趣的人推荐一本书:
- 流线型对象建模:模式、规则和实现