En CQRS, ¿debería mi lado de lectura devolver DTO o ViewModels?
Estoy teniendo un debate con mis compañeros de trabajo sobre el diseño del lado de lectura de una aplicación CQRS.
Opción 1 El lado de lectura de la aplicación de mi aplicación CQRS devuelve DTO, por ejemplo:
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);
}
}
Opcion 2 El lado de lectura de la aplicación devuelve ViewModels, por ejemplo
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));
}
}
De la investigación que mis compañeros de trabajo y yo hemos hecho sobre el tema, las respuestas parecen mixtas, parece que realmente depende del contexto. Entonces les pregunto, mis queridos StackOverflowians:
¿Un enfoque parece tener claras ventajas sobre el otro? ¿Si es así, Que son