C# 带有辅助对象的列表的优点/缺点
我再次能够找到一种方法来处理业务对象上带有辅助对象的列表 实际上,我们的代码通常如下所示:C# 带有辅助对象的列表的优点/缺点,c#,list,design-patterns,C#,List,Design Patterns,我再次能够找到一种方法来处理业务对象上带有辅助对象的列表 实际上,我们的代码通常如下所示: public class Object { private List<SubsidiaryObject> subsidiaryObjects = null; public List<SubsidiaryObject> SubsidiaryObjects { get { if (this.subsidia
public class Object
{
private List<SubsidiaryObject> subsidiaryObjects = null;
public List<SubsidiaryObject> SubsidiaryObjects
{
get
{
if (this.subsidiaryObjects == null)
{
this.subsidiaryObjects = DBClass.LoadListFromDatabase();
}
return this.subsidiaryObjects;
}
set
{
this.subsidiaryObjects = value;
}
}
}
公共类对象
{
私有列表子日志对象=null;
公共列表子日志对象
{
得到
{
if(this.subsidiaryObjects==null)
{
this.subdiaryObjects=DBClass.LoadListFromDatabase();
}
返回this.subdiaryobjects;
}
设置
{
this.subdiaryobjects=值;
}
}
}
关于这一点的反对意见是:
- 该属性在表示层中引用,并用于数据绑定。释放对实际列表的引用并用新列表替换它将在GUI中的引用列表中结束,该列表在对象上没有任何剩余内容
- 重新加载列表的简单方法(只需将引用设置为null,然后再次获取它)
public class Object2
{
private readonly List<SubsidiaryObject> subsidiaryObjects = new List<SubsidiaryObject>();
public List<SubsidiaryObject> SubsidiaryObjects
{
get
{
return this.subsidiaryObjects;
}
}
public void ReloadSubsidiaryObjects()
{
this.SubsidiaryObjects.Clear();
this.SubsidiaryObjects.AddRange(DBClass.LoadListFromDatabase());
}
}
公共类对象2
{
私有只读列表子日志对象=新列表();
公共列表子日志对象
{
得到
{
返回this.subdiaryobjects;
}
}
public void ReloadSubsidiaryObjects()
{
this.subdiaryobjects.Clear();
this.SubsidiaryObjects.AddRange(DBClass.LoadListFromDatabase());
}
}
关于这一点:
- 引用是连续的
- 重新加载列表更加困难,因为它不能被替换,但必须清除/填充重新加载的项目
因为这只是一个一般性问题,而不是针对某个特定问题,所以欢迎您给出每一个答案。您需要来电者修改列表吗?如果不是,你应该考虑返回<代码> iQueabd或
添加
/删除
的封面版本,以便拦截修改。在国际海事组织(IMO)中,将引用交给内部状态不是一个好主意
第三个选项是使用选项2,但每次需要重新填充列表时都要创建
Object2
类型的新实例。如果没有问题的附加上下文,这是我将选择的选项,但是您可能有理由希望保留原始实例 事实上,持有原始实例的主要原因是,它本身是一个附属对象。。。除了顶层的例外。