我正在处理的领域模型具有根聚合和子实体。类似以下代码:
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
现在我想让我的Order控制行。就像这样:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
目前我们正在使用以下模式:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
NHibernate直接映射到lines字段。
现在的问题是...
- 在这种情况下你会采取什么做法?
- 有人使用方法:public IEnumerable GetLines()吗?
- 对于属性,您使用什么作为返回类型?可能是ReadOnlyCollection或IEnumerable;
- 也许这不是询问的最佳位置?请提供建议。
更新:似乎IEnumerable获胜了,但解决方案仍然不完美...
return new ReadOnlyCollection<OrderLine>(_orderLines)
。这是因为.AsReadOnly()
返回一个仍具有Add()
(只有在调用时抛出异常)的对象,而 System.Collections.ObjectModel 中的ReadOnlyCollection<T>
则没有,因此可以确保没有人会错误地使用您的只读集合。 - Davreturn new ReadOnlyCollection<OrderLine>(new List<OrderLine>(_orderLines))
。否则,将从ISet转换时出现错误,无法将其强制转换为IList。 - Josh Anderson