У меня есть дебаты с моими коллегами в дизайне стороны чтения приложения CQRS.
Вариант 1:. Среда чтения приложения моего приложения CQRS возвращает DTO, например:
public interface IOrderReadService
{
public OrderDto Load(int id);
}
public class SomeController
{
public ActionResult SomeAction(int id)
{
var dto = ObjectFactory.GetInstance<IOrderReadService>().Load(id);
var viewModel = Mapper.Map<OrderDto, SomeViewModel>();
return View(viewModel);
}
}
public class SomeOtherController
{
public ActionResult SomeOtherAction(int id)
{
var dto = ObjectFactory.GetInstance<IOrderReadService>().Load(id);
var viewModel = Mapper.Map<OrderDto, SomeOtherViewModel>();
return View(viewModel);
}
}
Вариант 2: Сторона чтения приложения возвращает ViewModels, например:
public interface IOrderReadService
{
public SomeViewModel LoadSomething(int id);
public SomeOtherViewModel LoadSomethingElse(int id);
}
public class SomeController
{
public ActionResult SomeAction(int id)
{
return View(ObjectFactory.GetInstance<IOrderReadService>().LoadSomething(id));
}
}
public class SomeOtherController
{
public ActionResult SomeOtherAction(int id)
{
return View(ObjectFactory.GetInstance<IOrderReadService>().LoadSomethingElse(id));
}
}
Из исследований, которые мои коллеги и я сделали по этому поводу, ответы кажутся неоднозначными - похоже, что это действительно зависит от контекста. Поэтому я прошу вас, мой дорогой StackOverflowians:
Есть ли у одного подхода очевидные преимущества перед другими? Если да, то каковы они?