2010-06-03 64 views
0

如果您有一個引用客戶的訂單,那麼該模型是否包含客戶的ID或客戶對象的副本,如價值對象(思考DDD)?DDD和MVC模型包含單獨實體或實體本身的ID?

我想這樣做的部份:

public class Order { 
    public int ID {get;set;} 
    public Customer customer {get;set;} 
    ... 
} 

現在我這樣做:

public class Order { 
    public int ID {get;set;} 
    public int customerID {get;set;} 
    ... 
} 

這將是更方便地在完整的客戶對象,而不是ID向視圖模型傳遞給表單。否則,我需要弄清楚如何通過ID獲取供應商信息到訂單引用的視圖。

這也意味着存儲庫瞭解如何處理在調用保存時(如果我們選擇第一個選項)在訂單對象內發現的客戶對象。如果我們選擇第二個選項,我們需要知道視圖模型中的哪個位置。

他們肯定會選擇一個現有的客戶。但是,也可以確定他們可能想要在顯示屏上就地更改信息。有人可能會爭辯讓控制器提取客戶對象,將客戶更改單獨提交給存儲庫,然後將更改提交給訂單,並按照訂單保留customerID。

回答

3

如果你有以下型號:

public class Order { 
    public int ID {get;set;} 
    public Customer Customer {get;set;} 
    public object OrderProperty {get;set;} 
    ... 
} 

和下面的視圖(從ViewPage<Order>

您可以在您的視圖做

Html.TextBoxFor(m=>m.OrderProperty); 

而且

Html.HiddenFor(m=>m.Customer.Id) 
Html.TextBoxFor(m=>m.Customer.Name) 

在您的控制器中將自動綁定

public ActionResult SomeAction(Order order) 
{ 
    // order.OrderProperty will be bound 
    // order.Customer.Id will be bound 
    // order.Customer.Name will be bound 
}