MVC缺点
MVC的不足之处表现在以下几个方面:
(1) 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2) 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
(4) 目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
--------------------------------------------------------- 详解解释
MVC模式,侧重于竖向即请求、处理、呈现之间的协调,而忽略了模块之间的协调。
当用户发起请求的时候,由哪个模块来处理用户的请求已经确定了,这就使模块之间呈现非常强的独立性,这该怎么理解呢,举个例子来说。 假设现在,你有两个模块,一个是新闻模块,一个是图片模块,新闻模块展示一些新闻文章,图片模块用来展示图片。 如果用MVC,我们这样实现:定义两个控制器news,pic,两个模型news_model,pic_model,两个视图 news_view,pic_view,当有用户请求news控制器时,先调用news_model取得需要的数据,再用这些数据渲染 news_view,最后呈现给用户。
有一天,你的领导忽然有了新想法,HEY,伙计,新闻模块只显示新闻太单调,让新闻模块,能显示图片模块里最热门的图片。这下不好办 了,new_model里没有图片相关的模型,news_view里也没有显示图片列表的视图。你有解决办法?把显示图片列表相关的模型和视图分别复制一 份到news的模型和视图?不,这么做不好,如果我现在全站都要显示热门图片列表你怎么办?还复制吗?不可以的。后期维护会累死人。
在codeigniter框架里,有更好一点儿的解决办法,就是把显示图片列表这个功能做 成一个library,每需要的地方,调用library就可以,因为library有与控制器相同的沟通模型视图的功能。但这会带来一个新的问题:数据 共享,如果页面分割成不同的library来实现,不同的library的数据很难共享,library之间是完全独立的。
现在来看,这一切的一切都是因为mvc模式注重竖向的沟通,而忽略了横向的沟通,完全割裂了模块之间的关系。
模块沟通
TextPattern(简称TXP)是一个小型的BLOG系统,它最大的特点是注重模块之间的沟通,完全模糊了不同模块间的界限,对与用 户的一个请求,TXP完全没必要知道用户请求的是什么模块,新闻还是图片,只需要知道请求的页面要呈现些什么功能点。每一个小功能点都是完全独立的。
这是一种视图驱动的模式,接收到用户请求后,首先取到要请求的视图,视图文件再调用不同的功能点,这样就弱化了模块之间独立性。通俗点儿说:用户想看什么,你就给什么,不要管它是不是同一个模块,是不是有关系。wordpress也是基于视图驱动的模式的。
HMVC
层叠式的MVC,这是MVC模式的升级版本。首先把系统按功能点分,每个功能点的实现再采用MVC模式。HMVC同时兼顾了横向和竖向的沟通。
我所认为理想的模式:基于视图驱动的HMVC,基于视图驱动,就是以用户为基础,呈现用户想看到,以需求为驱动才是正确的。HMVC保证了代码的重用,易于维护。
视图驱动,可以借鉴WORDPRESS的实现,因为wordpress的模板开发、替换很容易;横向沟通的实现可以借鉴TXP;竖向沟通就是典型的MVC了。
MVC缺点的更多相关文章
- MVC缺点总结
MVC的缺点: 1.完全理解MVC比较复杂. 由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程. 2.调试困难. 因为模型和视图要严格的分离,这样也 ...
- MVVM中的vm双向监听和mvc的缺点
`MVVM`模型: - 即Model,模型,包括数据和一些基本操作 - 即View,视图,页面渲染结果- 即View-Model,模型与视图间的双向操作(无需开发人员干涉) `MVVM`中的`VM`要 ...
- Android -------- MVC,MVP 和 MVVM 架构设计模式
MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 一.MVC MV ...
- 简言MVC
什么是MVC? MVC是一种代码的组织结构,在一个工程项目中,将代码的数据处理,逻辑单元和交互部分分离开来达到一种低耦合的效果,便于工程的修改.MVC中M代表Model,V代表View,C代表Cont ...
- mvc与mvp与mvvm
==MVC,MVP和MVVM都是常见的软件架构设计模式,它通过分离关注点来改进代码的组织方式== MVC.MVP和MVVM的相同点和不同点 不同部分是C(Controller).P(Presenter ...
- MVC、MVP与MVVM架构模式
MVC(Model View Controller): View 层是界面,Model 层是业务逻辑,Controller 层用来调度 View 层和 Model 层, 将用户界面和业务逻辑合理的组织 ...
- Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...
- 再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦
精炼并增补于:界面之下:还原真实的MV*模式 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些应用逻辑,应用逻辑(application ...
- Android基础——框架模式MVC在安卓中的实践
本篇文章包含以下内容: MVC的介绍 MVC的实践 MVC的介绍 MVC (Model View Controller),是模型(model)视图(view)控制器(controller)的缩写,一种 ...
随机推荐
- php继承多态
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Mac下有道笔记本问题反馈
1).Mac笔记上的编辑状态框非常的小.操作起来不是非常的方便.可以把显示稍微放大一些. 2). 新建笔记本的时候,这里用户可能没有注意到这里可以输入,此时这里的高亮的颜色可以适当的修改成别的颜色. ...
- javascript之一切皆为对象2
其实呢,“函数function”和“对象object”之间还有这么一句话:对象是通过函数来创建的,而函数却又是一种对象. 这个函数是一种对象,上节中“Javascript之一切皆为对象1”也清楚的阐述 ...
- spring源码分析之cache demo
spring提供了对echache.guava.jcache的支持,先看一个echache的示例: import org.springframework.cache.CacheManager; imp ...
- 改用C++生成自动化数据表
改用C++生成自动化数据表 前面的文章中,我们讨论了使用一个基于.NET的第三方程序库来从程序中来生成数据表.在我看来,这整个思路是非常有用的,例如为显示测试结果.我经常会自己在博客中尝试各种像这样的 ...
- Win8.1安装mysql-installer-community-5.6.21.0.mis
引言 我本机是win8.1,在官网下载的这个安装是32位和64位都能装,安装步骤参考:http://jingyan.baidu.com/article/67662997305dcd54d51b84d4 ...
- 2.第一个Struts2程序-HelloWorld程序
1.新建Web Project项目:Study_Struts2 2.新建HelloWordAction.java类 3.复制struts.xml文件到src目录下,配置struts.xml文件内容如下 ...
- SQL Server基础之游标
查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标 游标是 ...
- CSS垂直居中和水平居中
前言 CSS居中一直是一个比较敏感的话题,为了以后开发的方便,楼主觉得确实需要总结一下了,总的来说,居中问题分为垂直居中和水平居中,实际上水平居中是很简单的,但垂直居中的方式和方法就千奇百怪了. 内联 ...
- Post方式打开新窗口
最近在做一个跟ERP相连的领料网站,用到POST的方法打开新窗口来打印报表 代码转别人的,在这里记一下: javascript代码 function openPostWindow(url, data1 ...