`

使用MVC模型的几个常见误区

阅读更多

像名片、日程、任务、短信、文件浏览器和多媒体播放器等应用程序,都采用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)会过于复杂,使实现的难度增加。

分享到:
评论

相关推荐

    Qt之MVC模型视图的使用入门

    在Qt框架中,MVC(Model-View-Controller)模式是一种设计模式,它将应用程序的逻辑分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种模式在处理复杂用户界面时尤其有用,因为它实现了...

    简单的MVC模型例子

    通过这个简单的MVC模型例子,你可以学习到如何组织和分离代码,理解模型如何与视图和控制器协同工作。这有助于你构建更复杂、可扩展的应用程序。同时,了解MVC模式也有助于你掌握其他基于MVC的框架,如Ruby on Rails...

    JSP+JavaBean+Servlet技术(MVC模型)

    JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet技术(MVC模型) JSP+JavaBean+Servlet...

    MVC模型demo

    通过学习和实践"MVC模型demo",开发者可以更好地理解如何组织和架构一个Web应用,提高代码的可读性和可测试性。同时,MVC模式也鼓励模块化开发,方便团队协作,因为每个组件都有明确的职责,减少了相互之间的干扰。...

    Java的MVC模型案例

    MVC将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller),使得各部分职责明确,易于维护。在这个基于Java的MVC案例中,我们将深入探讨这些组件以及它们如何协同工作。 1. **模型...

    采用MVC(模型-视图-控制器)构架的一个简单程序

    - **采用MVC(模型-视图-控制器)构架的一个简单**:这是一个不完整的文件名,可能是程序的主文件或者一个示例项目,它具体实现了MVC架构的简单应用。 要深入了解这个程序,可以查看“说明.htm”获取整体介绍,通过...

    MVC编程模型

    例如,实验7-MVC程序架构.doc可能详细描述了一个使用MVC模式的特定项目结构和实现方法。 **四、MVC模板和实例** 压缩包中的"SimpleDraw.exe"可能是一个简单的MVC应用程序示例,演示了如何在图形用户界面中应用MVC...

    阶段小项目使用MVC模型实现购物车效果

    本项目“阶段小项目使用MVC模型实现购物车效果”旨在通过这种模式来构建一个购物车系统,帮助用户进行商品选择、添加、删除以及查看购物车内的商品信息。 首先,我们来详细解析MVC模式的三个主要组成部分: 1. **...

    j2me手机程序mvc模型设计

    2. **可重用性**:模型和视图组件可以在多个项目中重复使用,降低了开发成本。 3. **易于测试**:由于MVC将业务逻辑和用户界面分离,因此更容易进行单元测试。 ##### 局限性: 1. **复杂性增加**:对于简单的...

    Qt使用mvc架构进行编程

    Qt,一个流行的跨平台应用开发框架,也支持MVC模式,使得开发者能够构建可扩展且易于维护的复杂应用程序。本篇文章将深入探讨Qt如何利用MVC架构进行编程,以及这一模式在实际开发中的应用和优势。 **模型(Model)*...

    优秀课设-基于C++和MVC模型实现的快递信息管理系统源码.zip

    优秀课设-基于C++和MVC模型实现的快递信息管理系统源码.zip优秀课设-基于C++和MVC模型实现的快递信息管理系统源码.zip优秀课设-基于C++和MVC模型实现的快递信息管理系统源码.zip优秀课设-基于C++和MVC模型实现的快递...

    MVC源码(mvc模型)

    **MVC(Model-View-Controller)模型**是软件开发中的一个设计模式,主要用于构建可维护性和可扩展性高的Web应用程序。这个模式将应用程序的逻辑分为三个主要组件:模型(Model)、视图(View)和控制器(Controller...

    MVC查询模型

    MVC查询模型是这个模式的一个重要组成部分,主要关注数据的获取和处理。 **1. 模型(Model)** 模型是应用程序的核心,负责处理业务逻辑和数据管理。在MVC查询模型中,模型组件通常包含了对数据库或其他数据源的...

    Qt使用MVC、数据库单例模式实现登录注册

    在本文中,我们将深入探讨如何使用Qt框架,结合MVC(Model-View-Controller)设计模式、SQLite3数据库以及单例模式来实现一个高效的登录注册系统。Qt是一个跨平台的应用程序开发框架,广泛用于GUI(图形用户界面)...

    浅谈模型-视图-控制器(MVC)模式

    1. **清晰的分层结构**:MVC模式通过将应用程序分为模型、视图和控制器三个层次,使各个组件之间的职责更加明确,便于开发人员理解和维护代码。 2. **易于扩展和修改**:由于模型、视图和控制器之间的解耦合,可以...

    简约版本 MVC 框架模型

    **简约版本 MVC 框架模型** MVC(Model-View-Controller)是一种常见的软件设计模式,广泛应用于...通过学习和实践这个简约版的MVC框架,可以逐步掌握Web开发中的分层设计思想,为将来使用更复杂的框架打下坚实基础。

    使用MVC框架开发租房网站1-3

    在本课程"使用MVC框架开发租房网站1-3"中,我们将深入学习北大青鸟ACCP6.0课程中的核心概念,特别是如何利用MVC(Model-View-Controller)框架来构建一个实用的租房网站。这个教程涵盖前三章的学习内容,包括课件、...

    PHP MVC

    - **Symfony** 是一个组件化的框架,其组件如HttpKernel、Routing和Form可以单独使用,也可以组合成完整的MVC应用。Symfony强调可重用性和可测试性。 - **CodeIgniter** 是一个轻量级的框架,适合快速开发小型项目...

    MVC Model2 模型

    MVC Model2 模型 调用过程 MVC Model2 模型 调用过程 MVC Model2 模型 调用过程

Global site tag (gtag.js) - Google Analytics