Должны ли обработчики запросов возвращать объекты команд при использовании CQRS с MVC - PullRequest
0 голосов
/ 15 января 2020

У меня есть 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
}
...