概述
MVC是一种思想,基于这个思想有了很多的框架,像java中的Struts,那么这个思想到底是什么呢?
MVC思想
思想,也就是想法,要想知道这个想法是什么,就需要先知道这个想法因为什么产生了,要知道,没有无缘无故的恨,所以,想法也是不可能在没有任何因的情况下产生的,那么到底是什么触发了这个想法的产生,并且把它推到了高潮呢?
要想知道这个,首先,我们要分析一下在MVC真正到来之前,我们的Web编程世界的状况。当时的Web开发,主要以WebForm的开发模式,即以asp.net的事件驱动页面的方式开发,这样的开发方式使得给数据方和显示数据方紧紧的耦合在一起,使其两者变化时所给对方带来的影响非常的大。
举个例子:前台页面拖放一个服务器端控件,后台代码直接操作该控件,这样的话,如果我们的需求变成这个控件不需要显示了,那么,我们需要做的就是,去掉这个控件,并且找到后台操作该控件的代码,然后去掉。
看了这个例子后,可能听起来感觉不是很深刻,此时,你可以让它放大一下,让它的逻辑性更复杂性,如:后台代码有这个服务器端控件的很多事件,每个事件里,又操作了很多其他服务端控件(属性修改,调用方法),并且对前台也有相应的影响(返回js脚本修改样式等等),这样的话,你要去掉这个控件,相当于这个页面翻了天,当然,这仅仅是一个页面,如果说是多个这样的页面呢?这很有可能重新开发我们的UI层。
MVC思想就是使数据提供方(Control)和数据显示方(View)完全的解耦,即,把我们之前的asp.net页面分成了两个独立的块:A块和B块,A块和B块之间的桥是数据,A给B数据,B爱怎么那些数据就可以显示那些数据,完全不影响A,即,在MVC框架中,是无法使用asp.net中的服务器端控件的。
MVC框架开发的两种架构
使用MVC的时候,我们会经常听到关于使用MVC搭一个框架所以采用的方式,一般有两种,一种是MVC仅仅是UI层的一个架构,一种是VC是UI层,M是下面所有的层(具体下面有多少层,那要看你具体是如何搭建这个项目的),本人更倾向于第一种,即,MVC只是一个变现层的框架,为什么这么认为呢?上面也提到过,V和C之间的沟通是媒介是数据,这个数据就是M,从这里我们可以知道,C给V传递一个M,那么这个M里的属性应该包含V中所有要显示的数据,从这里来看,M其实就是FormModel(PageModel),跟三层架构中的实体层没有半毛关系。
约定大于配置思想
在.net的MVC框架实现中,有一个重要的思想就是约定大于配置,我们知道,我们使用MVC开发Web时,用户请求的都是C中的方法,然后,C中方法将相应的实体(可能是其它的东西,二进制流等)返回给一个V,这个时候,有趣的事情就来了,即:到底给那个V,这个的确定应该在哪里实现呢?是把它放到配置文件中配置,还是写在程序中,微软是写在了程序中,java的Struts是配置文件(这个自己没有实验)。
配置文件更加的灵活,但是,想一想,C中的一个方法,我就要在配置文件中写一条,我就有点冷;微软的写在程序中采用的思想是约定大于配置,即,C中方法创建V的时候,系统自动会创建一个文件夹(跟C同名),V的视图约定是跟方法名同名,同时,方法在再没有制定相应的V时,系统会自动查找和C同名文件夹中,和方法名同名的视图进行显示,当然,这个约定并不是死的,我们也可以通过写一些方法参数来制定相应的视图。
总结
在学习.net的MVC时,给我的震惊太多了,那些封装好的js代码,jquery库,校验(前后台),异步(隐式非隐式),HttpHelper,路由规则,等等,抽取的太好了,封装的太棒了。