什么是MVC框架?
1、什么是mvc
Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里,在改进和个性化定制界面的及用户交互的时候,不需要重新编写业务逻辑。mvc用于映射传统的输入、处理、输出功能在一个逻辑的图形用户界面的结构中。
mvc就是类似三层的一种架构,主要采用封装(分层)的思想,来降低耦合度,从而使我们的系统更灵活,扩展性更好。
model是应用程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据。
view是应用程序中处理数据显示的部分。通常视图是依据数据模型创建的。
controller是应用程序中处理数据交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送。
2、mvc的优点
(1)多个视图共享一个模型,大大提高代码的可重用性。
(2)三个模块相互独立,改变其中一个不会影响其他两,所以依据这种设计模式能构建良好的松耦合性的组件。
(3)控制器提高了应用程序的灵活性和可控制性。控制器可以用来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提高强有力的手段。
3、mvc的缺点
(1)增加了系统结构和实现的复杂性。
对于简单页面,严格遵循mvc,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2)视图与控制器过于紧密的连接。
视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
(4)目前,一些高级的界面工具或构造器不支持mvc。
改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
综上,对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。所以我们在具体适用时,要综合考虑其适用范围,
4、框架vs设计模式
(1)框架通常是代码重用,而设计模式是设计重用,
架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。
在软件生产中有三种级别的重用:
内部重用,即在同一应用中能公共使用的抽象块;
代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;
应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
(2)设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象。
框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示 。
设计模式是比框架更小的元素。一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。
可以说,框架是软件,而设计模式是软件的知识。
(3)简而言之:框架是大智慧,用来对软件设计进行分工; 设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。
5、总结
通过MVC的学习,我们要知道它是用来分割页面和数据库访问的框架,降低了两者的耦合度,同时通过Controller的控制,也使系统更加的灵活,使我们的代码更健壮,复用性更强,但是凡事都有他适用的范围,我们不能觉得它好,就敢三七二十一的瞎用,有时可能会适得其反,因此MVC的学习还需要我们以后慢慢探讨。
参考文献:
http://blog.csdn.net/u010168160/article/details/43150049
什么是MVC框架?的更多相关文章
- 开源:Taurus.MVC 框架
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
- 转 10 个最佳的 Node.js 的 MVC 框架
10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到: 收藏 +322 Node.js 是一个基于Chrome JavaScri ...
- 制作自己的MVC框架(一)——简单粗暴的实现
现在市面上有很多成熟的MVC框架,可以拿来直接用,但自己造一下轮子其实也挺有意思的. 下面先来看个最简单粗暴的MVC实现. 5个文件就能实现最简单的MVC,在Apache中设置一个虚拟目录,配置个简单 ...
- 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>
一.引子 开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...
- 产品前端重构(TypeScript、MVC框架设计)
最近两周完成了对公司某一产品的前端重构,本文记录重构的主要思路及相关的设计内容. 公司期望把某一管理类信息系统从项目代码中抽取.重构为一个可复用的产品.该系统的前端是基于 ExtJs 5 进行构造的, ...
- 请求如何进入ASP.NET MVC框架
一.前言 对于WebForm开发,请求通常是一个以.aspx结尾的url,对应一个物理文件,从代码的角度来说它其实是一个控件(Page).而在MVC中,一个请求对应的是一个Controller里的Ac ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
随机推荐
- Git 游离的HEAD detached HEAD git reflog 查看所有提交的 id
- plv8 + hashids 生成短连接id
此文章是转载文章的一个学习,稍有改动 环境准备 plv8 环境 version: '3.6' services: postgres: image: dalongrong/plv8:2.3.12 ...
- 获取DOM元素的方式有哪些
document.getElementById();//id名 document.getElementsByTagName();//标签名 document.getElementsByClassNam ...
- Flask常用路由参数
Flask中的路由参数: @app.route(‘/’, endpoint=’xx’ , methods=[‘GET’,...]) >endpoint后的名字,用来反向生成url的.后面的名字随 ...
- 【BZOJ3569】DZY Loves Chinese II
[BZOJ3569]DZY Loves Chinese II 题面 bzoj 题目大意: 给你一张\(N(1\leq N\leq 10^5)\)个点\(M(1\leq M\leq 5\times 10 ...
- 【AGC009E】Eternal Average
[AGC009E]Eternal Average 题面 洛谷 题解 神仙题.jpg 我们把操作看成一棵\(k\)叉树,其中每个节点有权值,所有叶子节点(共\(n+m\)个)就是\(0\)或\(1\). ...
- helm原理
Helm: helm就相当于Linux的包管理工具yum,但它管理的程序包是一些打包好的清单文件. 其核心术语: Chart:一个helm程序包,它里面可理解为,包含了一下定义Pod的清单文件,这些清 ...
- SCAN----Redis检索键值对
转载地址:http://redis.readthedocs.org/en/latest/key/scan.html SCAN SCAN cursor [MATCH pattern] [COUNT co ...
- docker 镜像加速,修改为阿里云镜像
首先访问 登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,会获取专属的镜像地址 centos用户执行下列操作即可 s ...
- 【Activiti学习之六】BPMN任务
环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.任务任务表示流程中将要完成的工作. 1.任务继承 2.任务类型Service Tas ...