MVC与ASP.NET MVC框架概述
第一课 MVC与ASP.NET MVC框架概述
学习ASP.NET MVC需要具备的条件是:1.了解基本的Web开发
2.了解基本的Asp.NET
一、 MVC模式
1. MVC概述
Mvc模式是上个世纪70年代末由Trygve Reenskaug提出,运用于Smalltalk平台上。这个模式大家都应该有所了解,因为是目前提及最多的,同时也是滥用最多的一个模式。基本上什么东西都要用MVC,都可以往里面写。什么东西都往MVC上面扯,甚至很多的设计者一带到一点Controller,一点View,他们就说这就是MVC的变种。但是事实上很多模式是可以从Mvc中分离出来。这里有一个最大的特点就是概念的分离。有一个原则把握到这里来,所以很多东西都可以往MVC上面靠,都可以说是他的变种。似乎听他的描述一点点是对的,那我们也不要太关心,他的一个模式是不是真的和MVC有直接关系。还是要了解这些模式它需要的几点。比如他有哪些成员,成员之间的协作。或者说他可以在哪些地方使用,使用的话他有什么优点,有优点肯定有伴随而来的缺点。所以学习模式也不要过分的深究他里面的一些东西。尤其是在其他模式的一些联系。这样可能对模式的掌握比较好一些。
MVC模式,我们在这里把他认为是一种表现模式(UI/Presentation Pattern)。什么叫表现模式呢?表现模式就是说在前端应用程序肯定是用来表现的。有一块组件或者是一组组件是用于表现的。我们把MVC认为是一种表现模式,也就是说我们认为他是用于前段展示的这么一些组件的一个模式。当然也有很多朋友说,在实际应用中是把他当做一个架构模式再用。我整个应用程序的应用就是分为三个组件。这三大组件是符合MVC的。这也是可以的。但是我所讲的,以及接下来讲的都将作为一种表现模式来使用。一个模式用于表现模式或者架构模式也是要用到适应的场景的。所以说并不矛盾。
MVC很明显他有三种角色。M代表Model,V代表View,C代表Controller。在MVC里面这个Model翻译出来就是模型,既然是模型,他就一定有他一定的组织的。在MVC里面我们一般把他叫做用于存储数据的组件(与领域模型概念不同)。也就是说这个模型就是用于存放数据,并且给每个View使用的。可能也还有人会提到领域模型的概念。事实上站在MVC这个角度而言,概念和领域模型是有不同的。当让在最终使用上领域模型就当做来MVC中的模型来使用,或者当做模型中的一部分来使用,又或者作为领域模型中的一部分来替代。事实上这并不矛盾。对于MVC来说Model是这个模型中的一个组件。View根据Model数据进行内容展示的组件。把他表现给最终用户看。这不代表Model只有数据。因为Model可能也是领域模型。只是兼做Model而已。MVC中的Controller很多人都把他当做一个业务逻辑来看。但是Controller并不是一个业务逻辑大部分情况下他并不能作为一个业务逻辑来考虑。他的作用是用于和MV协作的一个组件。他的作用是接受一个用户指令,并对这个指令进行处理。处理的方式就是,访问业务逻辑操作业务。其实就是操作model,或者说是生成,或者说是改变,最后生成一个Model这个Model就带有一定的状态。并且选择一个View,就是说我要用到这个View,我要用这个View来输出。这个View就会拿到这个Model并且对Model进行读取,并进行显示出来。传统的MVC,这种模式可能也就是被使用或者说被误用最多的一个模式。所以又略微一点改变是很正常的。
下面我们谈谈MVC之间的协作,看下图:
这里他们的引用关系或者说依赖关系。这里箭头表示的含义是A有一个B引用,换句话说就是B依赖于A。上图中, Controller有一个View引用,也就是说View依赖于Controller,这就使View和Controller分离。但是很多时候这个依赖不是必须的。MVC中最主要的是View和Model之间的分离,还有一个Controller和Model的分离。这些引用都是单向的引用。Model并不知道View的存在。Model也不知道Controller的存在。而Model可能是业务逻辑的一部分,所以Controller大部分时候并不能把他当做业务逻辑。他的作用只是在Vie和Mode之间的协作。很多时候View和Controller之间也有双向。
MVC的两种分离:
l View和数据(Model)分离
能够为相同的Model开发不同的View进行展示。因为View是可以读取Model的,但是Model是不依赖任何一个View的。不依赖与某个特定的View,所以说我们完全可以使用不同的View来对同样状态的Model进行不同的展示。还有一点呢,View是可视的组件,而Model是一个不可视的组件,他有自己的状态,包含自己的逻辑。但是这一切都是在代码中的,是逻辑中的,他是不可视的组件。分离可视和不可视的组件,能够对Model进行独立测试(只有View到Model的单向引用)。测试中,模型对外部依赖越少,测试越容易。界面是一个依赖,数据库是一个依赖。和界面耦合的部分测试起来会相当麻烦。当然数据库与模型的依赖导致数据层的测试也很麻烦。
l View和表现逻辑(Controller)分离
分离逻辑和具体展示,能够对逻辑进行独立测试(只有Controller到View的单向引用)。View并不知道最终的表现逻辑是什么,这就说明我们分离逻辑到View独立的测试。我们只是测试Controller到Builder的创建。
2. MVC的变种
MVC的变种很多,列出以下最相近的两种模式。
l Observer模式
l MVP模式(主要运用事件驱动的模式。)
二、 MVC与三层架构模式
l 三层构架模式
三层构架是指UI、BL、Da。是一个典型的解决层次模型。三层结构分层后每一个层次的改变不会影响到其他层次。但是也有缺点有其他改变,需要在每个层次中做更改。三层架构在层次中是典型的从上往下的一个层次。他的依赖都是从上往下的。Ui层依赖于业务逻辑层。数据业务层依赖数据访问层。数据数据访问层还要依赖于业务逻辑层的话就很难分离。
l MVC并不是三层构架
MVC没有从上往下的一个依赖关系。没有太多可比性。他们是三者之间的一个协作。并不存在层次之间的分层关系。Mvc是表现模式,三层架构是一个构架模式。如果一定要放在一起的话的结果如下:
MVC是一个表现模式,所以很大层次就在UI层。Controller是用于处理View的一些关系的,所以只能放到UI层。Model则是业务逻辑层中的一部分。MVC一般不涉及到DA layer中的部分。注意是一般来说。
三、 WebForms VS ASP.NET MVC
1. WebForms与ASP.Net之间比较
l WebForms的优点:将Web开发抽象成一个组件模型;使用方便,入门容易;使用控件产业大大加强。
l WebForms的缺点:封装太强(这还是Web开发吗?);容易入门,用好难;不易进行单元测试,前后台不易配合。(MVP)
l 不过WebForms也在不断成长中。
2. ASP.NET MVC的优势
l 直接,Web开发就是Web开发
l 易于对界面逻辑进行单元测试 Design for testability
l 易于后台与前台开发人员的配合
l ASP.NET MVC是在ASP.NET 平台下开发Web应用程序的另一选择,并非为了取代WebForms。
3. ASP.NET MVC的特点
l 一切都是可替换的:ViewEngine、Action Filter
l 一切都是可测试的
l 公开源代码:可以修改,但是不可以重新发布
四、 其他
明天做一个简单Dome。