Получить сущность в методе сохранения. Что такое правильная форма? - PullRequest
0 голосов
/ 26 апреля 2010

Я новичок в asp.net mvc, и у меня есть некоторые сомнения.

П.С .: Я использую DDD, чтобы выучить

У меня есть ACtion в контроллере, и он сохранит сущность (из моей модели) в хранилище (для базы данных). Я сомневаюсь, как я могу получить информацию из View и сохранить ее в хранилище в моем контроллере? Правильно ли получить объект моей модели в методе Save контроллера, например:

public ActionResult Save (Продукт продукта) { // проверяем объект
// сохранить данные в хранилище
обратный просмотр («Успех»); }

Или мне нужно получить DTO (со структурой, аналогичной моей сущности) и создать объект, передающий свойство по сущности сущности? Мне не понравилась FormCollection, и я хотел бы знать, что рекомендуется архитектурно?

Большое спасибо, ребята

Приветствия

Ответы [ 4 ]

1 голос
/ 27 апреля 2010

Если вы хотите следовать методам DDD, описанным в «Синей книге», вам следует связать свои представления с DTO, которые можно перенаправить на тонкий слой «Application», где объекты домена создаются или извлекаются из базы данных. Этот прикладной уровень может быть простым фасадом с методами или может использовать шаблон команды.

Для демонстрации вы можете посмотреть мой проект - DDDSample.NET

1 голос
/ 26 апреля 2010

Как правило, в ASP.NET MVC действия вашего контроллера будут получать строго типизированные объекты, возвращаемые DefaultModelBinder при редактировании типов сущностей. Используя этот шаблон, вы можете передать «Продукт» в представление GET самостоятельно или как часть DTO, а затем ваш метод «Сохранить» получит объект «Продукт» в своем списке параметров.

Пока вы используете либо шаблоны редактора, либо поля с совпадающими именами (т. Е. Html.TextBox("Name") соответствует Product.Name), тогда DefaultModelBinder должен иметь возможность правильно заполнять объект типизированной сущности, передаваемый методу действия. Вам не нужно связываться с FormCollection, за исключением некоторых крайних случаев.

[HttpGet]
public ActionResult Create() {
    return View("Create", new Product());
}

[HttpPost]
public ActionResult Create(Product product) { //or Save(Product)
    ...
}
1 голос
/ 27 апреля 2010

Эту проблему можно решить, добавив так называемую модель представления .

В основном - модель представления - это DTO, которая предоставляет данные для конкретного представления. Аналогичным образом модели представления используются для возврата данных из представления посредством привязки модели. Затем - контроллер просто пересылает необходимые данные в модель предметной области.

0 голосов
/ 26 апреля 2010

Если в вашей форме есть поля, соответствующие полям в Product, они должны автоматически заполняться для вас на основе значений. Способ сохранения объекта зависит от модели данных, от того, создаете ли вы новую запись или редактируете существующую и т. Д.

...