Модели DDD и MVC содержат идентификатор отдельной сущности или самой сущности? - PullRequest
0 голосов
/ 03 июня 2010

Если у вас есть Заказ, который ссылается на покупателя, включает ли модель идентификатор покупателя или копию объекта покупателя, например объекта значения (с учетом DDD)?

Я хотел бы сделать это:

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;}
    ...
}

Было бы удобнее включить полный объект клиента, а не идентификатор для модели представления, переданный в форму. В противном случае мне нужно выяснить, как получить информацию о поставщике для представления, на которое указывает заказ по идентификатору.

Это также означает, что хранилище понимает, как обращаться с объектом заказчика, который он находит в объекте заказа, когда они вызывают save (если мы выберем первый вариант). Если мы выберем второй вариант, нам нужно будет знать, где в модели представления его разместить.

Уверен, они выберут существующего клиента. Тем не менее, они также могут изменить информацию на месте в форме отображения. Можно утверждать, что контроллер извлекает объект клиента, передает изменения клиента отдельно в хранилище, а затем передает изменения в заказ, сохраняя идентификатор клиента в заказе.

1 Ответ

3 голосов
/ 03 июня 2010

Если у вас есть следующая модель:

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
}
...