2010-08-02 71 views
0

我有几个业务类,如地址,产品,订单,OrderLine。在这种情况下,我有一个关于我的Order类以及如何在存储库中更新的问题。存储库和业务对象有什么好的做法?

Order类可以有多个OrderLine。这个类看起来像下面这样:

class Order { 
    private List<OrderLine> orderLines; 

    public Address CustomerAddress { get; set; } 
    public Address DeliveryAddress { get; set; } 

    public void Add(OrderLine line) { 
    // stuff to add order line. 
    } 

    public void Remove(int index) { 
    // stuff to remove order line by index. 
    } 
} 

当我需要获取一个订单,我可以做到以下几点:

Order myOrder = Orders.Get(5); // Gets the order with ID 5 from repository. 

现在,我可以根据需要添加或删除订单行和修改CustomerAddress或DeliveryAddress。

当我想更新修改后的顺序我可以这样做:

bool updated = order.Update(); 

在内部调用订单的更新方法存储库,如:

public bool Update() { 
    return Orders.Update(this); // Let repository handle updating of this order. 
} 

现在假设我以前使用得到命令Orders.Get(5)有10条命令行,我修改了1条命令行,添加了1条命令行并删除了1条命令行。

假设我分配一个不同的送货地址:

myOrder.DeliveryAddress = Addresses.Get(64); // Get address with ID 64 from repository and assign it to order. 

应该发生什么在订单仓库的更新方法?

是否应该更新整个订单(包括所有订单行),删除已删除的订单行,保存已添加的订单行并更新已更改的订单行?

我在这里有点迷路,因为当所有这些内部项目(地址和订单行)都必须更新,插入或删除时,它变得非常复杂。

有人有什么建议吗?

预先感谢您:)

回答

0

如果你遵循尽管领域驱动设计的学校,你会参加你的模型为聚集体,每个聚集会由多个相关的类的非常多,订单,订单行, 等等。在每个聚合中,一个类被指定为聚合根,例如,订单,并负责管理聚合中所有对象的模型完整性。 DDD存储库在对象集合上操作,而不是单个对象。准确地说,如何将模型参与聚合可能很困难,但一旦你完成了这个任务,责任就变得清晰了。

相关问题