7 domain-driven-design repository-pattern linq-to-sql
我似乎已经陷入了对整个DDD\LinqToSql业务的一点困惑.我正在构建一个使用POCOS和linq到sql的系统,我有聚合根的存储库.因此,例如,如果您有Order-> OrderLine类,则您有Order而不是OrderLine的存储库,因为Order是聚合的根.存储库具有删除订单的删除方法,但是如何删除OrderLines?您可能认为Order上有一个名为RemoveOrderLine的方法,该方法从OrderLines集合中删除了该行,但它还需要从底层的l2s表中删除OrderLine.由于OrderLine没有存储库,您应该怎么做?
也许有专门的公共存储库用于查询域对象实际用于删除聚合内容的根和内部通用存储库?
public class OrderRepository : Repository<Order> {
public Order GetOrderByWhatever();
}
public class Order {
public List<OrderLines> Lines {get; set;} //Will return a readonly list
public RemoveLine(OrderLine line) {
Lines.Remove(line);
//************* NOW WHAT? *************//
//(new Repository<OrderLine>(uow)).Delete(line) Perhaps??
// But now we have to pass in the UOW and object is not persistent ignorant. AAGH!
}
}
Run Code Online (Sandbox Code Playgroud)
我很想知道其他人做了什么因为我不能成为唯一一个与此斗争的人....我希望....谢谢
您可以在订单上调用RemoveOrderLine,从而调用相关逻辑。这不包括对其持久版本进行更改。
稍后,您在存储库上调用保存/更新方法,该方法接收修改后的订单。具体的挑战在于了解域对象中发生了什么变化,其中有几个选项(我确信比我列出的要多):
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |