MVC到底分几层?

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

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

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

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

你可能感兴趣的:(架构设计)