У меня спор с коллегами по разработке стороны чтения приложения 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));
}
}
Из исследований, проведенных мной и моими коллегами по этому вопросу, ответы кажутся смешанными - похоже, это действительно зависит от контекста. Итак, я спрашиваю вас, мои дорогие стеки Оверфлояны:
Кажется ли, что один подход имеет явные преимущества перед другим? Если да, то что они?