Mik*_*liy 10 .net arrays nhibernate domain-driven-design list
我正在研究的域模型具有根聚合和子实体.类似下面的代码:
class Order
{
IList<OrderLine> Lines {get;set;}
}
class OrderLine
{
}
Run Code Online (Sandbox Code Playgroud)
现在我希望我的订单控制线.像这样的东西:
class Order
{
OrderLine[] Lines {get;}
void AddLine(OrderLine line);
}
Run Code Online (Sandbox Code Playgroud)
目前我们使用以下模式:
class Order
{
private IList<OrderLine> lines = new List<OrderLine>();
OrderLine[] Lines {get {return this.lines;}}
void AddLine(OrderLine line)
{
this.orders.Add(line);
{
}
Run Code Online (Sandbox Code Playgroud)
NHibernate直接映射到lines字段.
现在问题......
更新:似乎IEnumerable获胜,但解决方案仍然不完美......
Fre*_*els 14
我是这样做的:
public class Order
{
private ISet<OrderLine> _orderLines = new HashedSet<OrderLine>();
public ReadOnlyCollection<OrderLine> OrderLines
{
get { return new List<OrderLine>(_orderLines).AsReadOnly(); }
}
public void AddOrderLine( OrderLine ol )
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在映射中,NHibernate被告知要使用_orderLines字段:
<set name="OrderLine" access="field.camelcase-underscore" ... >
...
</set>
Run Code Online (Sandbox Code Playgroud)
我使用的模式是:
class Order
{
private List<OrderLine> lines = new List<OrderLine>();
IEnumerable<OrderLine> Lines { get { return this.lines; } }
void AddLine(OrderLine line)
{
this.orders.Add(line);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 3.5,则可以使用LINQ获得IEnumerable所需的所有搜索功能,并隐藏您的集合实现.
返回OrderLine []的问题是您的集合可以在外部修改,例如:
Order.Lines[0] = new OrderLine().
Run Code Online (Sandbox Code Playgroud)