MVC,从字面意思来解释就是Model-View-Controller,也就是模型,视图,控制器……应该说是模型视图的控制器,那MVC到底有什么好处,有什么坏处,处理过程又是怎样?接着我们一起步入MVC的世界。

1、什么是MVC

MVC是一种设计模式,一种强制性把表现层和数据层剥离的设计模式,可以加上Bll层和Dal层演化成三层架构!

2MVC页面请求

首先,假如我们需要访问这样的一个地址:http://localhost/home/demo,在MVC模式下是这样处理的,先别管localhost,这个是域名,代表本地机器, 原本Web页面访问一个页面时

是需要加上后缀,例如http://localhost/home/demo.aspx,然后直接跳转到这个页面,MVC不是这样的,首先是进入一个URL Route(地址路由),在这里可以指定地址所匹配的跳转格式,配置地址路由在Global.asax.cs(全局静态类),一般配置的路由是:

"{controller}/{action}/{id}"//该控制器的一个方法,id是传递的参数

new {controller = "Main", action = "Login", id = "" }//初始化一个控制器名为Main,方法为Login,id为空的路由

这样当用户提出页面请求的时候,程序就会自动找到匹配这条路由的一个控制器和旗下的方法,并且返回一个页面……返回的页面可带有参数。这就类似我们用连接字符串(***.aspx?id=***),这样就完成了一个页面请求,不加参数的话就默认为空。那么请求的页面内容又是什么呢?

3MVC内部处理

假如你要访问数据库的一张表,并在客户端显示,步骤如下:

     首先由地址路由找到相对应页面的控制器的方法

     在方法里面写好你要控制的模型和你要返回的视图,至于你要处理什么模型,什么数据库,控制器不用管,它只负责返回一个视图给用户,当然控制器和模型和视图需要紧密相关,它需要把处理好的视图返回到客户端,那么就需要一个与客户端交互的角色——DataView(这是一个存放数据的缓冲区),把取出来的表放进了DataView里面并返回到客户端页面

     客户端从DataView里面取出表(记得转换成datatable类型)。然后用foreach循环就可以取出表里面的内容……

而对数据库的修改一般都是通过提交表单,从而进入控制器里面的某个方法,再执行里面的逻辑处理……<form id="form1" action="DoEdit" method="post">,而控制器里面也会有一个DoEdit的方法,里面就是处理业务的逻辑,可以返回一个状态也可以无返回。

4、回到控制器

在这里有疑问啦?控制器怎么搭建模型,怎么获得数据呢……于是乎,Model粉墨登场……Model包含了两部分:业务实体对象和业务处理对象,业务实体对象(这里简称D层)主要是负责“怎么做”,而业务处理对象(这里简称B层)主要是负责“做什么”。D层主要是负责数据库的操作,有可能返回一个表,有可能返回一个状态……而B层主要是负责返回D层对象所产生的结果,所以B层也称为业务逻辑层,处理数据库业务,而具体怎么处理它不用管。这样做有一个好处:你的业务逻辑层永远是对的(在业务逻辑正确的条件下),错的就可能是你里面的数据处理方法,你只要改里面的东西就可以了。(传统的三层是这样子的,业务逻辑层永远是对的,数据层可能会出错,多了这一层不就使得代码更加复杂吗?这个有点想不通,望大家指教,谢谢)。

5MVC的优点

     减少了代码的重用性,可扩展性强:

web模式下,一个页面(aspx)同时对应一个隐藏文件(cs),如果页面上的业务逻辑一样,而数据不一样,那么还得几个页面对应几个后台文件。而MVC就可以用一个控制器去实现多个页面,也可以一个模型应用于多个页面……

     降低耦合性,结构清晰:

强制性的分离了逻辑层,数据层,表现层。各自分工,互不干扰……如果出现了异常,开发人员可以关注某一层,而不用从头到尾找bug,提高了开发人员的纠错效率,易于维护。

6MVC的缺点

     增加了系统的结构和实现的复杂性:

系统将会增加很多文件夹和很多类,管理起来比较麻烦,如果文件多的话,有时会摸不着头脑页面的返回过程过于复杂,因为控制器和视图层的关系比较密切,有时会乱了思维。

     内部原理复杂,可读性低:

由于MVC没有明确的定义,内部原理复杂,一时之间很难搞懂

!--由于我刚接触的MVC,对其中的概念还不是很了解,希望路过的朋友指教一下!小弟先谢谢了……

 

 

posted on 2010-01-06 00:21  祯の少  阅读(575)  评论(1编辑  收藏  举报