类设计-在类中加载列表,或者可以用任何其他方式完成
本文关键字:任何 方式完 其他 或者 加载 列表 | 更新日期: 2023-09-27 18:01:48
我目前正在设计一个类"User"
public class User
{
...
public int LocationId {get; set;}
public string LocationName
{
get
{
//Get name from the LocationList based on the LocationId
}
}
public List<SelectListItem> LocationList
{
get
{
//Retrieve the location as list from DB
}
}
....
}
我担心的是,每次创建新对象时,都会访问DB并检索位置列表。
可以这样创建类吗?还是有更好的方法?任何帮助将是非常感激的。谢谢。
只有在访问LocationList
时才会访问数据库,而不是在新建类时。然而,不,这不是最好的方法。实体类/视图模型不应该直接与上下文交互。这样做的最大原因是,你应该只有一个上下文实例,并且不可能总是正确地将它注入到这些类中。
相反,您应该使用存储库或服务类抽象出查询,然后通过调用存储库或服务上的一些方法直接在控制器操作中设置list属性。
除了Chris提到的,还有一点,看看这条规则:
CA1002:不要暴露通用列表。
所以一般来说,类不应该公开任何返回泛型列表的属性。试着使用其中一个:System.Collections.ObjectModel.Collection
System.Collections.ObjectModel.ReadOnlyCollection
System.Collections.ObjectModel.KeyedCollection
每当需要与外部系统/源通信时,创建一个存储库几乎总是一个好主意。
通过这种方式,您可以将与给定源交互的所有逻辑放在一个地方,并可以在该特定位置调试和编辑它。另外,正如Chris Pratt所提到的,在任何给定的时间,您应该只使用一个数据库上下文。