作者写的非常好,忍不住转载一下!

原文出处:http://blog.csdn.net/absurd/article/details/1434042

作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2006-12-19

像名片、日程、任务、短信、文件浏览器和多媒体播放器等应用程序,都采用MVC模型作为其基本架构。但从这段时间的文档评审来看,我们对MVC模型的理解仍然存在一些误区。这里简单谈一谈,欢迎交流。

先说两句题外话,免得少数网友替我着急。他们会说,拜托,你写点新内容好不好,不要用MVC这类老掉牙的东西来充数。呵,很多人都热衷于新技术,我以前也一样。经过五六年的学习和实践后,让人遗憾的是,我没有发现什么真正的新技术。相反,倒是一些”老”技术充满魅力。包括像汇编语言、C/C++、awk/bash、计算机组成原理、操作系统原理、数据库原理、编译原理、数据结构、TCP/IP实现、面向对象、设计模式、POSA、代码重构、自动测试、人机交互,RUP/XP等比较通用的知识,也包括像linux、apache、xerces/xalan、GTK+/X/glib、STL/boost、MFC、COM/DCOM等这样特定平台/函数库。根据自己的经验来看,了解一项技术的基本内容并不难,难点在于灵活应用它们,在于适当的时候选择适当的技术。个人认为,把目前这些”老”技术掌握好了,无论是设计还是编程,完全可以做到游刃有余的境界(我还在努力中)。相反,整天只关注所谓的新技术,对一些经典技术反而只了解皮毛,可以说是捡了芝麻丢了西瓜,得不尝失。道不同不相与谋,热衷于新技术的朋友可以在此打住了。

好了,言归正传。下面是我在我们平台中发现的一些问题:

1.        把控制器(Controller)和模型(Model)混在了一起。MVC模型的三大部分中的控制器(Controller)是最容易让人混淆的,在基于窗口的GUI应用程序中,控制器(Controller)一般就是控件的事件处理函数。控制器(Controller)有两个基本功能,一是把用户从界面上的操作(点击按钮)映射成模型(Model)对应的功能(如删除数据),二是把模型(Model)的变化更新到视图(View)上。控制器(Controller)和视图(View)的耦合比较紧密,尽管可以用策略模式来实现多个控制器(Controller)之间的切换,但那样做,实现复杂而且没有多少好处,所以很少有人去分离控制器(Controller)和视图(View)(据说WEB开发例外)。然而Glade把产生的事件处理函数放在callbacks.h/.c中,把产生的界面代码放在interface.h/.c中,这看似把界面与实现分离了,使得一些同事误以为callbacks.h/.c中的代码就是模型(Model),所以把控制器(Controller)和模型(Model)混一起了。结果是模型(Model)包含了一些控件,没有做到与界面的分离。

2.        所有界面与模型(Model)关联。有的界面是比较独立的,完全可以以一种调用关系来实现,结果也与模型(Model)挂了钩。这看似充分利用了模型(Model),实际上是把模型(Model)当成了全局变量的替代器。结果是一方面增加了界面与模型(Model)耦合,让这些独立的界面难以重用,同时也增加了模型(Model)复杂度。

 

3.        认为一个应用程序只能有一个模型(Model)。大部分应用程序都只需要一个模型,但一些同事把这个现象这看成了定论。其实模型(Model)是一个逻辑上的概念,如果几个视图和另外几个视图毫无关联,最好各自使用独立的模型(Model)。否则把多个模型(Model)绞在一起,造成不必要的耦合,使用代码重用困难,也让增加模型(Model)的复杂度,使实现的难度增加。

4.        认为模型(Model)是一个不可再分的单元。在一些设计中,界面无关的实现代码的确与界面代码分开了,但它们都放在模型(Model)里,模型(Model)成了一个庞然大物。我们说了,模型(Model)只是一个逻辑上的概念,甚至完全可以没有模型(Model)这个名字出现,其架构仍然是基于MVC的。模型(Model)的责任一般要进一步划分,把责任分配多个更专业的类上。否则模型(Model)会过于复杂,使实现的难度增加。

使用MVC模型的几个常见误区 【转载】Li XianJing相关推荐

  1. Web前端工程师的一些常见误区

    想要作为一名合格的web前端工程师,那么掌握基本的开发技术是远远不够的,在职场中还要少犯一些错误,本期小编为大家分享的web前端培训教程主要是介绍一些web前端工程师常见的误区,希望对大家有所帮助. ...

  2. Web前端工程师的一些常见误区介绍!

    想要作为一名合格的web前端工程师,那么掌握基本的开发技术是远远不够的,在职场中还要少犯一些错误,本期小编主要是介绍一些web前端工程师常见的误区,希望对大家有所帮助. Web前端工程师的一些常见误区 ...

  3. 【说透区块链系列】区块链有哪些常见误区?

    经过了我前面几篇文章的铺垫讲解,你应该已经对区块链的知识体系已经有了一个基本的了解,但是,区块链是一项新兴的事物,大多数人依然处于知识的迷雾区,对区块链的理解并不是十分透彻. 我在很多场合都做过区块链 ...

  4. Qt - MVC模型/视图编程

    MVC模型/视图编程 Qt中的模型/视图架构用来实现大量的数据存储.处理及显示. MVC(Model-View-Controller)包括了3个组件: 模型(Model)是应用对象,用来表示数据: 视 ...

  5. 【虹科】揭开关于激光雷达传感器的常见误区——第一部分

    随着世界科技向智能化.高效率发展,激光雷达及其应用也受到越来越多的关注.但是,人们对激光雷达技术及性能等方面也存在一些误解.本文将为大家揭开关于激光雷达的六个常见误区. 1.激光雷达应用的技术复杂 虽 ...

  6. 10.0 SpringMVC源码分析之MVC 模型由来

    0.MVC 模型由来 0.1 Model1 模型 Model1 模型是很早以前项目开发的一种常见模型,项目主要由 jsp 和 JavaBean 两部分组成. 它的优点是:结构简单,开发小型项目时效率高 ...

  7. ASP.NET MVC – 模型简介

    MVC 模型包含了除纯视图和控制器逻辑以外的其他所有应用程序逻辑(业务逻辑.验证逻辑.数据访问逻辑). MVC 模型 MVC 模型包含了除纯视图和控制器逻辑以外的其他所有应用程序逻辑(业务逻辑.验证逻 ...

  8. B2B2C网站系统建设的常见误区

    随着网络的高速发展,极大的改变了人们的购物消费行为习惯,因此也带动电子商务的发展,很多传统企业想选择转型却对B2B2C网站系统缺乏一定的了解.那么接下来就为大家讲讲B2B2C网站系统的在建设过程中所遇 ...

  9. 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图

    在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图 前提介绍 这个文章我们要讨论,在ASP.NET MVC模型的项目中,怎么选择一个最有效的方式来将多个数据模型(m ...

最新文章

  1. 【数字信号处理】离散时间系统稳定性 ( 稳定性概念 | 稳定性用法 )
  2. THE QUESTIONS :The Top 25 (what we don't know?)
  3. RTMP Handshake
  4. 前端基础之CSS属性
  5. [转]ISO镜像工具PowerISO和UltraISO制作ISO光盘镜像教程
  6. 浅谈运营商行业业务的发展方向
  7. 程序员离职原因的最佳回答_转行面试,高情商回答“你为什么要离职?”(建议收藏)...
  8. 已知ip地址如何算默认网关
  9. 再见python你好julia_再见,Python2。你好,Python3
  10. 生活随记 - 75公斤重 急需减肥
  11. java clh_AQS基础——多图详解CLH锁的原理与实现
  12. 神卓互联是什么?优秀的内网穿透
  13. 水星路由器wan口ip显示0_路由器wan口ip地址显示0.0.0.0怎么办(2)
  14. MOS管中的N型/P型是什么意思?沟道呢?金属氧化物膜又是什么
  15. 【Unity大气散射】GAMES104:3A中如何实现大气散射
  16. 广受青睐的题材---蒸汽朋克[Steampunk](转)
  17. java异常在控制台和日志里面的打印记录
  18. 计算机毕业设计php小说阅读网站
  19. matlab平摆线曲率参数方程,参数方程中曲线欣赏—平摆线解读.ppt
  20. 好久不见——洗尽铅华后的释然放手

热门文章

  1. oracle 作业调度里pl/sql怎么写,PL/SQL实现Oracle数据库任务调度
  2. 论文研究 | 基于机器视觉的钢材表面缺陷检测
  3. Go实现算法:N的阶乘
  4. 题目 1071: 二级C语言-阶乘公式求值
  5. 国二报C语言,国二C语言.doc
  6. 二台苹果电脑如何用网线直接连接
  7. 解读报告 Future of Project Management
  8. 通过python自动生成curl的调用命令
  9. Linux结合ls和rm命令删除文件
  10. EL(Expression Language)语言介绍