gpt4 book ai didi

c# - 领域类应该如何设计?

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:12 25 4
gpt4 key购买 nike

我想举一个例子和一些要求,并想了解最好的领域模型应该是什么。

数据库是:

One Country has Many Cities.
One City has many Towns

两个表都有 Id 列。

在我的 C# 中,我有

public class Country
{
public List<City> Cities {get;set;}
public int Id;
}

public class City
{
public int Id {get;set;}
public int CountryId {get;set;}
}
  1. 当我想更新一个城市时,我可以只取国家的 Id并更新它。所以这个设计有效。
  2. 当我想插入一个新的 城市,我可以获取城市对象并将其插入 Db 中。所以这个设计 有效。

  3. 当我想删除一个城市时,我使用城市的 Id 和 从数据库中删除它。所以这个设计可行。

  4. 当我想展示一个城市时, 我还需要 UI 网格中的国家/地区列,因此此设计不起作用。

然后我会从国家/地区 ID 列中获取每个城市的国家/地区,这很痛苦。

如果我的 Country 具有 City 类的属性,那么我必须为所有城市对象创建 Country 对象,并且在更新、插入和删除期间我不需要 country 对象 - 我只需要 CountryId。

所以我的问题是:

  • 我应该如何设计它们?
  • 我应该在中创建一个 CountryName 属性吗城市级?
  • 我应该尝试您推荐的另一种方法吗?

最佳答案

如果我的 Country 具有 City 类的属性,那么我必须为所有城市对象创建 Country 对象,并且在更新、插入和删除期间我不需要 country 对象 - 我只需要 CountryId。

在所有City 对象中填充一个Country 对象有什么问题?它们不需要填充,您可以简单地存储 ID。这在 ORM 世界(也可能在外部)中被称为延迟加载。

例如:

public class Country
{
private List<City> _cities;

public int Id { get;set; }
public IEnumerable<City> Cities
{
get
{
// load on demand
if (_cities == null)
_cities = LoadCities(Id);

return _cities;
}
}
}

public class City
{
public int Id { get;set; }
public Country Country { get;set; }
}

它归结为控制关系的哪一方。国家负责更新其所有子项(级联更新),还是您只希望城市来做?无论哪种方式,持有一个 Country 对象都比让 ID 随意 float 要少得多以数据库为中心。

如果您在城市和国家表(而不是 LoadCities)之间执行连接,那么您无论如何都会拥有每个城市的国家/地区 ID,并预取数据。

关于c# - 领域类应该如何设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com