我的名字是安德森,在这一刻我对表现的构成指示有一些疑问。在这个模型中 我有一个简单的用户群和 departmentbase 。 userbase具有deparmentbase类型的属性,departmentbase具有类型为departmentbase的list属性。 当我有一个userbase实例时,加载有关部门的信息,但随后DepartmentBase加载有关部门的信息!!!。
现在,当我为所有用户提供了一个用户库列表时,所有用户的流程再次加载,这是一个很好的做法,或者什么是更好的表单?
alt text http://img146.imageshack.us/img146/3949/diagram.jpg
答案 0 :(得分:3)
我不知道它是否是更好(甚至适用)的方法,但我有时会制作我用于其他对象引用的对象的简短版本。 breif版本充当对象的完整版本的基类,并且通常包含在这些对象的列表中可见的信息。它通常不包含其他对象的列表,对其他类的任何引用通常都会引用该类的简要版本。这消除了一些不必要的数据加载,以及一些循环引用的情况。例如:
public class DepartmentBrief
{
public string Name { get; set; }
}
public class Department : DepartmentBrief
{
public Department()
{
Departments = new List<DepartmentBrief>();
}
public IEnumerable<DepartmentBrief> Departments { get; private set; }
}
public class UserBase
{
public DepartmentBrief Department { get; set; }
}
此方法与具有延迟加载的完整对象引用之间的一个区别是,您需要在需要时显式加载额外数据。如果您有UserBase
实例,并且需要Department
UserBase
中的部门列表,则需要编写一些代码来获取Department
对象DepartmentBrief
中的UserBase
对象正在识别。这可能被认为是一个缺点,但我个人喜欢这样一个事实,即在准确查看代码到达数据存储时,它将会很清楚。
答案 1 :(得分:2)
这取决于,如果您在加载用户列表后直接需要所有部门数据,那么这是最好的方法。如果您不立即需要它,最好使用 lazy loading 作为部门数据。这意味着您推迟加载部门数据,直到调用显式方法(或属性)。