一、什么是MVC
MVC是Model-View-Controller的缩写,它把软件系统分为Model(模型)、View(视图)和Controller(控制),实现Model和View分离的方法来组织代码,达到分层设计的目的,从而使代码解耦,便于维护和代码的复用。所以说MVC是一种软件设计的理念,可以让我们的代码结构更加清晰明了,没有使用MVC的时候,我们的代码结构像下图那团乱麻一样,而MVC提供一种规则,使用MVC分层设计之后把相同类型的代码放在一起,这样就形成了层次,达到分层解耦、复用、便于测试和维护的目的。
Model:“模型层”,负责业务对象与数据库的映射(ORM),拥有处理任务的业务规则,处理后返回数据。
View:“视图层”,提供面向用户交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。
Controller:“控制层”,根据用户从"视图层"输入的请求,调用相应的"模型层"处理,并确定对应视图显示模型层返回的数据。
二、MVC的优缺点
MVC的优点:
1.耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.重用性高
MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。
3.部署快,生命周期成本低
MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
4.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
MVC的缺点:
1.完全理解MVC比较复杂。
由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程。
2.调试困难。
因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。
3.不适合小型,中等规模的应用程序
在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。
4.增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
三、MVC的演化Web MVC
随着Web的兴起,人们开始把MVC,MVP等知识应用到Web环境下。由于MVC中Controller截获用户通过鼠标或键盘发出的请求,然后改变Model的状态,Model通过Observer Synchronization(观察者模式)通知View自己的状态发生了变化,View查询Model展现数据。但Web环境中HTTP请求是无状态的,每次请求都是独立的,所以不可能实现观察者模式。
在传统的MVC中,Controler可以改变Model的状态,View可以查询Model的状态,所以说对Model而言,Controller和View的地位是平等的,不过在Web MVC中,Controller变成了中继者,主要工作是协调Model和View。一个典型的Web MVC流程:Controller截获用户发出的请求;Controller调用Model完成状态的读写操作;Controller把数据传递给View;View渲染最终结果并呈献给用户
四、MVC的演化MTV
Django的MTV模式本质上与MVC模式并没有什么差别,也是为了各组件之间保持松耦合关系,只是定义上有些不同。Django将MVC中的视图进一步分解为Django视图和Django模板两个部分,分别决定“展现哪些数据” 和“如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。至于MVC控制器部分,由Django框架的URLconf来实现,因此Django更关注Model(模型)、Template(模版)和View(视图),称为MTV模式。
这种设计模式关键的优势在于各种组件都是松耦合的,每个由 Django驱动的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。比如,开发者更改一个应用程序中的URL而不用影响到这个程序底层的实现。设计师可以改变HTML页面的样式而不用接触Python代码。数据库管理员可以重新命名数据表并且只需更改模型,无需从一大堆文件中进行查找和替换。
共同学习,写下你的评论
评论加载中...
作者其他优质文章