初识MVC——MVC与三层/MVC与设计模式

   题记:对于刚接触项目的菜鸟来说,MVC是一个新鲜的东西,浅显的知道MVC是分为MODELViewcontroler层,于是觉得它与我们曾经用到的三层架构相似,于是就错误的混到了一起。由于想要知道它内部的逻辑运行,所以上网查了很多资料,才发现自己对MVC和三层的理解是错误的,所以在此总结一下自己对MVC的认识。

 

MVC出现的原因:

    代码混乱:大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。

    分工不明确:通俗的举个例子来说:假设我们正在做一个简单的表单提交,我们希望对用户数据的数据进行验证和封装,最终交给业务逻辑层一个实体对象。从三层架构分析,验证和封装并没有明确的表明是处于哪层的职责范围,那么应该交给谁来做呢?

    UIBLL层依赖强:在三层框架中,我们经常把UI的逻辑控制(服务器控件的读取、设置、事件等等)写在页面的后置隐藏代码中,并且依赖于业务逻辑层。


    :我们在web开发中引入MVC思想,想要达到的目的是: 实现UI层和业务逻辑层分离——MVC充当了两层之间适配器的作用。

 

MVC组成:

   View(视图):提供用户交互界面, 直接面向用户,可以直接理解为界面,它是提供给用户操作用户端,是程序的外壳,负责处理图形化操作界面,仅限于视图上的数据采集和处理,用户请求。项目越大,视图的复杂程度越多,如HTMLXHTMLXML/XSLWeb ServiceMacromedia Flash等等。而MVC的机制正好可以处理很多不同的视图。

   Model(模型):是核心的“数据层”,表示为业务数据和业务逻辑,是程序需要操作的数据和信息,负责封装和事务逻辑相关资料,以及处理资料方法,属于业务流程处理。应用于模型的代码只需写一次就可以被多个视图重用,减少了代码的重复性。

   Controller(控制):负责根据用户从视图层输入的指令,选取数据层中的数据,控制应用程式流程,然后对其进行相应的操作,产生最终的结果,回应资料模型变化,简单来说就是负责选择什么样的模型,选择什么样的视图,来完成什么样的用户请求。

                      

   结:这三层是紧密联系又互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。

 

MVC运行过程:

    用户的操作/命令-->控制器(C,内部进行识别和一定的信息收集等处理)-->模型(M,调用业务处理方法,进行状态的修改、数据的更新等处理)-->视图(V,根据模型对象内部状态、数据的更改而进行视图显示的更改)。


                   

MVC与三层的区别:

   名称域不同:三层架构,属于业务架构范围。而MVC模式,属于设计模式范围。

   包含关系不同MVC中的三层是三层架构中UI层的一部分,三层与MVC可以共存

   Model意义不同三层中MVC中Model层中业务逻辑与访问数据组成的,“三层”中典型的Model层是以实体类构成的

                      

 

MVC与设计模式的区别:

    MVC是一种比较特殊的模式,MVC并不属于23个设计模式之列,我们之前了解到的23个模式可以认为是一些中级的模式,在他们基础上也可以通过组合来得到一些高级的模式,即架构模式。

    MVC可以看作是一些模式进行组合之后的结果实际上,MVC的出现要早于设计模式的提出,因而只是对它在设计模式的基础上进行在分析。所以说现在有必要站在设计模式的思想上来看MVC模式。

    MVC模式可以分解为以下设计模式组合模式+策略模式+观察者模式约等于MVC模式(当然MVC模式要多一些东西)。MVC还使用了其它的设计模式,比如说工厂方法模式用来说明对一个view的默认的控制器,还有装饰模式用来为view增加一个滚动条等。但是在MVC模式里起主要作用的还是前面列出来的三个设计模式。

                      

                      

   策略模式:用户的操作/命令都会对应着一个个控制器,这里控制器就是一个个为操作/命令而定制的策略,通过它的封装来完成一系列或简单或复杂的操作。

   观察者模式:模型对象分装了内部的业务处理,只是提供了各种操作业务和获取数据的方法,在改变状态和更新数据的时候会将状态的改变和数据的更新通知给关心这些状态和数据的使用者,于是,模型对象便是一个可观察者对象,它的观察者就是视图,因为视图需要根据模型对象的状态和数据来进行数据的特定显示。

   组合模式:视图对象只是提供给用户的显示部分,而显示的部分因复杂程度不同而要使用到不同的显示组建,于是就要使用到组合模式了。



总结:在项目中通常使用三层架构与MVC的结合,系统比较庞大的话,通常设计的时候采用客户端与服务端的分离,架空MVC中的Model层,由controler直接与Bll层交互(有时候为了解表现层UI即(MVC)和业务层BLL之间的耦合,还会在业务层与表现层之间的服务端加入服务层,controler与service交互)

          

   备注:以上是作者本人学习和借鉴的成果,肯定会有错误或不足之处,希望大家可以多多指正。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
在刚刚步入“多层结构”Web应用程序开发的时候,我阅读过几篇关于“asp.net三层结构开发”的文章。但其多半都是对PetShop3.0和Duwamish7的局部剖析或者是学习笔记。对“三层结构”通体分析的学术文章几乎没有。 2005年2月11日,Bincess BBS彬月论坛开始试运行。不久之后,我写了一篇题目为《浅谈“三层结构”原理与用意》的文章。旧版文章以彬月论坛程序中的部分代码举例,通过全局视角阐述了什么是“三层结构”的开发模式?为什么要这样做?怎样做?……而在这篇文章的新作中,配合这篇文章我写了7个程序实例(TraceLWord1~TraceLWord7留言板)以帮助读者理解“三层结构”应用程序。这些程序示例可以在随带的CodePackage目录中找到——   对于那些有丰富经验的Web应用程序开发人员,他们认为文章写的通俗易懂,很值得一读。可是对于asp.net初学者,特别是没有任何开发经验的人,文章阅读起来就感到非常困难,不知文章所云。甚至有些读者对“三层结构”的认识更模糊了……   关于“多层结构”开发模式,存在这样一种争议:一部分学者认为“多层结构”与“面向对象的程序设计思想”有着非常紧密的联系。而另外一部分学者却认为二者之间并无直接联系。写作这篇文章并不是要终结这种争议,其行文目的是希望读者能够明白:在使用asp.net进行Web应用程序开发时,实现“多层结构”开发模式的方法、原理及用意。要顺利的阅读这篇文章,希望读者能对“面向对象的程序设计思想”有一定深度的认识,最好能懂一些“设计模式”的知识。如果你并不了解前面这些,那么这篇文章可能并不适合你现在阅读。不过,无论这篇文章面对的读者是谁,我都会尽量将文章写好。我希望这篇文章能成为学习“三层结构”设计思想的经典文章!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值