2010-06-03 28 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 
}