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. 【BZOJ3747】[POI2015]Kinoman 线段树

    [BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...

  3. intellij idea pycharm phpstorm webstorm 这些编辑器像 sublime text 一样使用 ctrl d 来操作光标多选。

    在Windows 和 Linux 快捷键是 Alt+J,在 Mac OS X 系统下快捷键是 Ctrl+G . 参考 https://blog.jetbrains.com/phpstorm/2014/ ...

  4. node.js实现国标GB28181设备接入的sip服务器解决方案

    方案背景 在介绍GB28181接入服务器的方案前,咱们先大概给大家介绍一下为什么我们选择了用nodejs开发国标GB28181的服务,我大概给很多人介绍过这个方案,大部分都为之虎躯一震,nodejs在 ...

  5. 数组的includes操作

    数组实例的 includes() Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似.ES2016 引入了该方法. [ ...

  6. vuex源码 安装依赖问题

    今天下载vuex源码时 安装依赖出现以下问题 > chromedriver@2.32.3 install /Users/bao/Desktop/vue-store/vuex/node_modul ...

  7. 通过systemd配置Docker

    1. systemd Service相关目录 通常情况下,我们有3种方式可以配置etcd中的service.以docker为例,1)在目录/etc/systemd/system/docker.serv ...

  8. 选股公式blog+节选

    <大智慧软件选股_大智慧软件如何选股>——一般性操作 http://jingyan.baidu.com/article/fa4125acb2028d28ac70923e.html < ...

  9. HDU - 2709 Sumsets 【递推】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2709 题意 给出一个数N 要求有多少种方式 求和 能够等于N 加的数 必须是 2的幂次 思路 首先可以 ...

  10. FHQ_treap

    上个月还在舔\(splay\):\(FHQ-treap\)太好打了吧真香 前言 还是建议先把\(splay\)学好再看,讲得会比较粗略(但该有的不会少),或者左转其他文章 \(FHQ-treap\)是 ...