Модели DDD и MVC имеют удостоверение личности отдельной сущности или самой сущности?
-
24-10-2019 - |
Вопрос
Если у вас есть заказ, который ссылается на клиента, включает ли модель идентификатор клиента или копию объекта клиента, как объект Value (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;}
...
}
Было бы удобнее включить полный объект клиента, а не идентификатор для модели представления, переданной в форму. В противном случае мне нужно выяснить, как доставить информацию поставщика в представление о том, что заказ ссылается на ID.
Это также подразумевает, что репозиторий понимает, как справиться с объектом клиента, который он находит в объекте заказа, когда они вызовут сохранение (если мы выберем первый вариант). Если мы выберем второй вариант, нам нужно будет знать, где в модели представления, чтобы ее поместить.
Убедитесь, что они выберут существующего клиента. Тем не менее, также уверен, что они могут захотеть изменить информацию на месте в форме отображения. Можно утверждать, что контроллер извлечь объект клиента, отправить изменения клиента отдельно в репозиторий, а затем отправить изменения в заказ, сохраняя CustomerID в заказе.
Решение
Если у вас есть следующая модель:
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
}