我在CQRS应用程序的读取设计中与我的同事进行了辩论。在CQRS中,我的阅读方应该返回DTO还是ViewModels?
选项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:
一种方法似乎比另一种有明显的优势吗?如果是这样,他们是什么?
我要补充一点分歧的主要问题是在编辑画面正在处理聚集根的儿童。 –
对自己的无耻提及:你的问题让我想到了返回ViewModels的后果。感谢那天的食物! http://stackoverflow.com/q/21408226/253098 – SystematicFrank