【发布时间】:2012-01-03 14:00:10
【问题描述】:
我想展示一个示例和一些要求,并想了解最好的领域模型应该是什么。
数据库是:
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;}
}
- 当我想更新一个城市时,我可以只取国家的 ID 并更新它。所以这个设计有效。
当我想插入一个新的 城市,我可以将城市对象插入到 Db 中。所以这个设计 有效。
当我想删除一个城市时,我获取城市的 ID 并 从 Db 中删除它。所以这个设计很有效。
当我想展示一个城市时, 我还需要 UI 网格中的国家列,所以这个设计不起作用。
然后我会从国家/地区 id 列中获取每个城市的国家/地区,这很痛苦。
如果 Country 具有 City 类的属性,那么我将不得不为所有城市对象创建 Country 对象,并且在更新、插入和删除期间我不需要 Country 对象 - 我只需要 CountryId。
所以我的问题是:
- 我应该如何设计它们?
- 我是否应该在 城市级?
- 我应该尝试您推荐的其他方法吗?
【问题讨论】:
-
这就是为什么建议有一组单独的模型和视图模型类;映射到您在数据库中设置事物的方式的模型类和映射到您的视图设置方式的视图模型类。
-
您是在使用关系数据库还是其他类型的数据库,或者所有内容都在内存中?
-
我正在使用数据库。在视图模型中,我应该从 Db 中检索每个模型的相关实体吗?我目前正在使用基于模型类顶部的视图模型。问题是我必须为每个城市对象获取国家名称,这意味着我必须调用具有国家名称列的不同选择查询,这也意味着模型是通过首先创建城市然后创建国家对象来创建的城市。