У меня есть ASP. NET Core MVC приложение, которое использует шаблон проектирования CQRS.
Я использую обработчики запросов для возврата моделей представления, которые напрямую передаются в представление (без DTO между). В приведенном ниже сценарии объект EditCustomerCommand служит двум целям: просмотреть модель для страницы редактирования и команду для публикации.
Не знаю почему, но что-то не так. Когда я запустил этот проект, я принял решение, что обработчики запросов будут возвращать модели представления, которые прошли прямо к представлениям.
Должен ли мой обработчик запросов возвращать DTO, который отображается непосредственно в команду / viewmodel? Если моя команда не будет моделью представления, это будет означать отображение в посте из модели представления в команду? Какие еще варианты у меня есть?
Функция редактирования клиента выглядит следующим образом:
public ActionResult EditCustomer(int custId)
{
var query = new EditCustomerQuery(custId);
var editCustomerCommand = _mediator.SendQuery<EditCustomerCommand, EditCustomerQuery>(query);
return View(editCustomerCommand)
}
[HttpPost]
public ActionResult EditCustomer(EditCustomerCommand command)
{
//send command to commandhandler
}
Файл модели My View выглядит следующим образом
public class EditCustomerCommand
{
public int Id;
[Required]
public string Name;
}
Внешний вид файла My View вот так
@model EditCustomerCommand
<form>
<input for="@model.Name">
<validation for="@model.Name">
</form>
Мой QueryHandler выглядит так
public class EditCustomerQueryHandler : IQueryHandler<EditCustomerCommand>
{
//populate and return EditCustomerCommand object so it can be displayed on the view
}
Мой CommandHandler выглядит так
public class EditCustomerCommandHandler : ICommandHandler<EditCustomerCommand>
{
//update db
}