将模型代码划分为MVC中的逻辑部分的最佳实践?哪个最好?

Ore*_*n A 3 model-view-controller design-patterns

我是新来的MVC但是从我迄今教训(例如这里,通过ScottGu)一个应该立志"瘦控制器",而不是"胖"的人.
除此之外,视图本身就很薄,并且您将在模型中获得大量代码.

所以我的问题是 - 如何将模型中的代码划分为不同的逻辑部分以降低复杂性?
您是否在模型本身内使用数据访问层和业务逻辑层(我猜这仍然会包含大量代码),还是有更好的方法可以做到这一点?

谢谢.

Col*_*ond 10

我们使用的图层是:

  • 视图(使用强类型视图模型)
  • 调节器
  • 查看模型服务
  • 商业服务
  • (EF)上下文

视图 - 尽可能薄 - 没有逻辑 - 只显示

视图模型 - 每个视图的强类型 - 不包含实体,只包含我们想要在任何一个视图中的字段.

控制器 - 只是路由和调用VMS.通过路由到错误页面处理从较低级别冒出的异常.

View Model Services - 创建视图模型并将其解压缩到EF实体中.没有数据访问逻辑.每个控制器一个VMS.大量使用AutoMapper将视图模型的数据传输到实体中.

商业服务 - 数据访问的主要方面.每个控制器一个BS.使用尽可能多的存储库来完成其工作.交易范围控制器在这里 VMS对BS进行一次调用 - 如果需要,它会在单个事务中包装所有必需的DB调用.我们预计BS将来会拨打外部服务电话.

存储库 - 每个(顶级)实体一个 - 为一组实体执行所有CRUD操作.我们的实体是大型复杂的对象图 - 因此我们处理每个存储库的最顶层父级.

上下文 - 围绕EF产生的上下文的薄包装,所以他们可以嘲笑我.

就MVC而言 - 模型部分由控制器下方的所有部分组成.