【发布时间】:2011-10-12 23:23:55
【问题描述】:
我正在与我的同事就 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:
一种方法似乎比另一种方法具有明显的优势吗?如果有,它们是什么?
【问题讨论】:
-
我应该补充一点,主要的分歧点在于编辑屏幕正在处理聚合根的子级。
-
无耻引用自己:你的问题让我想到了返回 ViewModel 的后果。感谢您今天的食物! stackoverflow.com/q/21408226/253098