目前,在我的实体中,我将集合公开为 IList,但我一直在考虑将它们公开为 IEnumerable,以防止用户手动添加到集合中。我为这些操作添加了特定的内容,以便我可以确保我的双向关系保持完整。在这种情况下,我想到了几个问题。
- 如果我将它们公开为 IEnumerable 是否意味着我需要为每个代表实体中关系的集合提供一个 Add 和 Remove 方法?
- 有没有更简单的方法来做到这一点?我并不反对这样做,只是想知道。
- 你是这样做的吗?
Example:
public class OrderHeader
{
public virtual Guid OrderId { get; private set; }
public virtual IList<OrderLine> OrderLines { get; set; }
public virtual void AddLine(OrderLine orderLine)
{
orderLine.Order = this;
OrderLines.Add(orderLine);
}
//No need for a remove method since we expose collection as IList
}
转换上面的类以便我们只公开 IEnumerable 将导致:
public class OrderHeader
{
public virtual Guid OrderId { get; private set; }
private IList<OrderLine> orderLines { get; set; }
public IEnumerable<OrderLine> OrderLines { get { return orderLines; } }
public virtual void AddLine(OrderLine orderLine)
{
orderLine.Order = this;
orderLines.Add(orderLine);
}
public virtual void RemoveLine(OrderLine orderLine)
{
orderLines.Remove(orderLine);
}
}
- 是的,如果您公开 IEnumerable,最好在类上添加方法来处理添加/删除
- 私人支持领域是一个非常好的解决方案。
- 是的,但请记住,如果您想真正只读访问公开的集合,请使用 ReadOnlyCollection -http://msdn.microsoft.com/en-us/library/ms132474.aspx http://msdn.microsoft.com/en-us/library/ms132474.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)