我可能在这里分析过度了,但是根据我对 MVC 所做的所有阅读,似乎有很多关于如何做事的意见。
是否有“最佳实践”站点或文档来定义每个 MVC 的职责?
我有几个问题,请记住我使用的是 EF/Repository&UnitOfWork/Service 模式:
1)如何从服务层到视图模型获取领域对象和业务规则的验证结果(错误消息等)?
2) 我正在使用域对象和执行所有业务逻辑的服务层,然后我将域对象发送到控制器并让它们(通过 AutoMapper)将它们转换为视图的视图模型。还有哪些其他类型的事情是控制器的责任?下面的代码可以吗?控制器中的逻辑是否太多?:
public ActionResult SomeAction()
{
var model = Mapper.Map<DomainObject, ViewModel>(service.QueryReposForData());
model.SomeCollectionForSelectList = Mapper.Map<IEnumerable<DomainObject>, IEnumerable<ViewModel>>(service.QueryReposForSelectListData());
return View(model);
}
我不认为控制器中唯一的东西是一条返回视图的行,该视图具有映射到视图模型的对象图?
3) 我认为可以在 ViewModels 上设置属性来指示视图是否可以隐藏某些东西,然后在视图中执行该逻辑?例子:
@if(Model.DisplaySomething)
{
<div>Something to show</div>
}
else
{
<div>Something else to show</div>
}
4)我正在考虑让我的服务在写入时将某种TransactionResult
对象返回给控制器,以使其成为服务处理事务的责任。所以我会有一个聚合服务,它会启动一个事务(UnitOfWork)做它需要做的事情,然后返回这个TransactionResult
可能有错误消息的?我认为我不应该让控制器负责管理事务,而是让它只是将映射到域对象的视图模型传递给服务并让它对其进行操作?
5) 另外,您想使用多少 ActionFilter?我知道这是一个巨大的可扩展点,但我经常发现自己试图将所有模型创建填充到一个过滤器中。