2010-08-02 70 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存儲庫在對象集合上操作,而不是單個對象。準確地說,如何將模型參與聚合可能很困難,但一旦你完成了這個任務,責任就變得清晰了。

相關問題