C#-类设计问题-加载属性列表
假设我有一个如下所示的类:C#-类设计问题-加载属性列表,c#,class-design,C#,Class Design,假设我有一个如下所示的类: public class Stage { public int ID {get; set;} public strint Code {get; set;} public string Name {get; set;} private List<Machine> _machines; public List<Machine> Machines { get{ return _mach
public class Stage
{
public int ID {get; set;}
public strint Code {get; set;}
public string Name {get; set;}
private List<Machine> _machines;
public List<Machine> Machines
{
get{ return _machines; }
set{ _machines = value; }
}
.........
.........
// This method returns all the Stages stored
// in the Stage-table in the database.
public static List<Stage> Get()
{
}
}
唯一的问题是,如果机器有一个List
-属性(例如,List Parts
,等等),并且Machine.Get(stages[i].ID)
-方法有类似的编码,这将导致整个表的递归加载。像这样,整个数据库可能已经加载到内存中
(2) 在属性中直接访问数据库:
private List<Machine> _machines;
public List<Machine> Machines
{
get
{
//Get Machines by Stage ID and put them on List<Machine>
_machines = Machine.Get(this.ID);
return _machines;
}
set{ _machines = value; }
}
因为,每次这种循环投入运行时,都必须访问数据库
(ii)get
和set
必须在Save()
、Update()
等中进行不同的处理
有谁能给我推荐更好的方法吗?根据您的设计,您不需要每次访问属性时都加载数据。相反,您可以检查它是否已经设置好,并且只在需要时进行加载。这是一个设计
private List\u机器;
公共列表机器
{
得到
{
//按阶段ID获取机器并将其放在列表中
//除非我们还没有这样做
如果(_machines==null)
{
_machines=Machine.Get(this.ID);
}
返回机器;
}
设置{u machines=value;}
}
+1我写了同样的东西,刷新了,并准备好了;您已经编写了它。因此,只有空检查起作用。
private List<Machine> _machines;
public List<Machine> Machines
{
get
{
//Get Machines by Stage ID and put them on List<Machine>
_machines = Machine.Get(this.ID);
return _machines;
}
set{ _machines = value; }
}
Stage stage = Stage.Get(...ID...);
foreach(Machine m in stage.Machine)
{
//Do something
..............
}
private List<Machine> _machines;
public List<Machine> Machines
{
get
{
//Get Machines by Stage ID and put them on List<Machine>
//only if we have not already done so
if (_machines == null)
{
_machines = Machine.Get(this.ID);
}
return _machines;
}
set{ _machines = value; }
}