mvc的模式已经深入人心,想必大家都很熟悉,但是未必都能遵守mvc模式。我们的一个mvc项目比较简单,主要是数据库的查询。一个DBHelp类,封装了数据库的操作,然后Controller中进行中各种查询,包含分页查询。也就是说,所有的逻辑全部在Controller中完成。请问这还是mvc模式吗?

严格意义上,已经违背了mvc模式,但是从实践层面看,似乎没有什么问题,这样做简单好多。我们知道mvc把一个应用程序划分了三个层次结构。Model、View和Controller,Model代表了业务逻辑,比如说数据库的各种查询,Controller就是调用Model中的方法,然后把Model中的数据部分填充,最后选择View,把Model数据给View。

我们的Model文件夹下存放的是自定义的ViewModel,ViewModel作为view的数据源对象。这时候,我们是不是可以称为MVVMC模式呢?我们去掉C,加上数据绑定,这不就是MVVM模式吗?我觉得MVVM模式的亮点在于数据绑定,也就是View和ViewModel的绑定。有一个js叫knockout.js是一个前台的MVVM框架。WPF,也是典型的MVVM模式。

我觉得mvc模式,适合界面和逻辑都比较复杂的项目。比如我们用的webform,有些人会在页面的CodeBehind中,写入大量的代码,少则几千,多则上万。界面的逻辑与功能的逻辑的代码彻底耦合在一起。维护起来的确不容易。针对如此情况,我们用mvc是不是能好一些?无论哪一种模式,都是分层的思想,没有人能用一个方法把所有的逻辑都包含在里面。MVC、MVP、MVVM模式,它们旨在分离View和Model,避免过度耦合。MVP模式,分离的更彻底。它通过引入IView接口,在View中实现IView接口。View中可以直接调用P,而P中注入了IView,因此P可以间接地调用View,P中可以调用M,M封装了业务逻辑。这样View和Model彻底分离。这个模式好不好?就看从哪个角度说了。如果项目中,对测试要求很高的话,这个模式确实好。View和Model可以单独测试。但是这个模式实现起来有些麻烦。因此,对某些测试要求高的View和Model使用此模式应该更好一些。

MVVM模式,可以实现对Model的实时变化的监控。以及自动化测试可以基于此模式。

MVC:从View开始,用户在View上的任何操作,都可以调用Controller,Controller调用Model,然后更新View。

MVP:View和Model完全解耦

MVVM:View和Model也没有直接的关系,它和MVP有点相似。

这三个模式本质上都反映了Model和View之间的关系。传统的MVC和MVP都是Model变化,然后更新View,但是MVVM更进一步,它的View变化,导致ViewModel直接变化。这样最大的优点,就是省略了从View到ViewModel的映射。我们可以直接”忘记”View,只需要Model和ViewModel交互。毕竟View比较麻烦,它的UI控件,也就是Html控件的多样化,处理起来比较复杂。

浅谈MVC、MVP、MVVM模式的更多相关文章

  1. 浅谈MVC MVP MVVM

    复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...

  2. 浅谈MVC和MVVM模式

    MVC I’m dating with a model… and a view, and a controller. 众所周知,MVC 是开发客户端最经典的设计模式,iOS 开发也不例外,但是 MVC ...

  3. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  4. 浅谈MVC、MVVM的区别

    一.概述 MVC,MVP,MVVM是三种常见的前端架构模式(Architectural Pattern),它通过分离关注点来改进代码组织方式.不同于设计模式(Design Pattern),只是为了解 ...

  5. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

  6. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  7. mvc mvp mvvm模式的区别

    mvc模式中,Model不依赖于View,但是View是依赖于Model的,m和v没有进行完全的分离,三者之间是单向的操作 mvp模式中,m和v之间的交互是双向的,m和v完全分离,m和v的交互是通过P ...

  8. Android MVC,MVP,MVVM模式入门——重构登陆注册功能

    一  MVC模式: M:model,业务逻辑 V:view,对应布局文件 C:Controllor,对应Activity 项目框架: 代码部分: layout文件(适用于MVC和MVP两个Demo): ...

  9. 用户界面编程模式 MVC MVP MVVM

    用户界面编程模式 MVC MVP MVVM 程序 = 数据 + 算法 数据:就是待处理的东西 算法:就是代码 涉及到人机交互的程序,不可避免涉及到界面和界面上显示的数据原始方式是界面代码和逻辑代码糅合 ...

  10. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

随机推荐

  1. 服务器端获取表单数据的编码解码问题(servlet)

    首先需要明确指出的是,这里的服务器是指tomcat. 在页面没有明确指定编码的情况下,客户端通过input标签和字符串向服务器传递两个值param1和param2.如果直接使用request.getP ...

  2. [原创]将本地代码共享到github的操作步骤

    将本地代码共享到github的操作步骤 本地代码目录执行如下命令,初始化为git仓库. git init 到github上新建一个仓库,假设为https://github.com/sky0014/sk ...

  3. Storm伪分布式搭建

    配置zookeeper 下载zookeeper tar包 解压:tar -zxvf zookeeper-3.4.10.tar.gz -C /root/training/ 配置 cd /root/tra ...

  4. 打包合并多个dll

    复杂项目中会引用大量的第三方dll文件,为了便于管理会尝试把相关打包合并成一个dll文件. 推荐使用ILMerge,如需使用网上自行下载. 使用方法: cd 安装目录 ILmerge /target: ...

  5. element-ui table 点击分页table滚动到顶部

    在做项目中,碰到一个问题,table加了固定头,内容可滚动,当滚到table底边时,点击分页后还在底边 解决方法:设置table的 ref='multipleTable' //切换分页的方法加上下面这 ...

  6. Full卷积 Same卷积 Vaild卷积

  7. restful规范和restframework框架

    什么是接口? 接口可以理解为url就是接口. 那么在其他语言里面接口也可以是约束类 restful规范是什么? RESTful是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便 ...

  8. MediaRecorder实现微信、QQ、人人、易信等语音录制功能工具:MediaUtilAPI

    本文介绍使用MediaRecorder进行录制音频.录制视频学习,熟悉MediaRecorder执行流程,通过简单的Demo结合解释运行效果,最后封装MediaRecorder的API工具,实现常见比 ...

  9. Netbeans8.0设置Consola字体并解决中文乱码问题

    在Netbeans8.0上开发php,设置字体为Consola后.发现中文显示是乱码的.经过改动jre的配置文件成功攻克了这个问题. 1. 进入jdk安装文件夹下/jre/lib文件夹,找到fontc ...

  10. 【android】在Service的onStartCommand()中调用stopself()应该注意的问题

    在Service的onStartCommand()中调用stopself()后并不会立马destroy掉service,而是等onStartCommand()运行完才destroy. public c ...