MVC到底分几层?

      在技术分享课上,小组成员比较了Thinkjs与Express,说Thinkjs的分层设计更好,而Express的MVC框架更容易理解,当时我打断了他的讲述并提问,Express没有分层吗?MVC不能分层吗?MVC到底分几层?

      MVC到底分几层?其实,这是一个混淆逻辑的说话,MVC是一种复合的设计模式,而分层则是一种降低耦合的架构设计思想,这两者本来风牛马不相及,然而随着Struts、Spring MVC等WEB框架的兴起,加上一群辅导老师的推泼助澜,把它们强行堆积在一起,在面试JAVA程序员时,经常听到这样的说法,MVC分为三层,控制器C是第一层,业务模型M是第二层,数据访问是第三层,如果我继续问,那视图V在哪一层?应试者一般都哑口无言。

      在大部分的WEB应用中,我们一般都划分为三层,WEB控制层、业务逻辑层与数据访问层,见下图所示。但这并不意味着,我们只能划分为三层,划分为多少层完全取决于业务的需要,比如还可以添加基础服务层、数据集成层等,并且还可以切面分层,如安全控制层、系统日志层等。
三层模型展示

      需要注意的是,这里的分层跟MVC真没什么关系,如果有,那还破坏了分层思想的设计原则,分层思想的核心就是不能进行跨层调用,并且调用的方向是不可逆的,MVC能满足这样的设计原则吗?当然不能!无论把控制器C放到哪一层,它都要进行双层调用,分别调用业务模型M与视图模型V,如下图所示。
MVC模式
      最后,需要重点说明的,业务模型M与视图模型V并不是没有联系,而只是没有直接的联系,以Spring MVC为例,业务模型M与视图模型V至少还需要验证器、数据格式花器以及转换器,否则视图既无法显示模型的内容,模型也无法根据视图的变化自动更新。原因?原因当然是视图只能接受基本类型的数据了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值