`
izuoyan
  • 浏览: 9230488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GUI应用的若干问题和模式

 
阅读更多

我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计, 已经有了很多模式, 比如Martin Fowler的blog中有一篇"GUI Architectures“, 里面介绍了Form & Control、MVC、MVP、Passive View、Presentation Model、 Supervising Controller、Event Aggregator, Observer Synchronization等多种模式。模式可以帮助我们建立优雅的架构, 但前提是弄清楚模式的应用场景。这些模式自然不是凭空产生的, 都是为了解决具体的问题. 模式在实现上的差别, 通常都体现了在约束间的不同取舍, 以及问题的差别. 弄清楚GUI应用面临的设计上的问题, 有助于我们正确的挑选设计方案. 下面我们来看一些GUI应用常见的设计问题。

第一个问题就是界面的变化和业务的变化频率不同, 通常是界面变化更频繁, 而我们希望一方的变化不至于影响另一方的逻辑. 对于这个问题, 一个自然的解决方案就是分离界面显示逻辑和后台业务逻辑. MVC和MVP都涉及到了这一点, 它们的共同特点就是把View和应用程序的其它部分分开了. 这是一个关键的分离, 从此之后应用被分为两部分, 抛开它们彼此可以独立的变化不说. 最大的好处是这两部分的问题也可以分而治之。应用程序的其它部分有自己的问题和方案, 不在我们讨论范围内. 我们后面将聚焦在View和相关的显示逻辑方面的问题.

当然这种分离也不是没有代价的, 一个立即的问题就是View如何更新. MVC和MVP把View分出来制造了这个问题, 它们也同时提供了手段解决这个问题。

  • MVP中Presenter完成业务逻辑后可以拿到最新的Model, 它可以操控视图, 根据最新的Model来设置视图的各种属性并刷新。

  • MVC中Controller在完成业务逻辑操作后更新Model, Model变化时可以发出事件, View订阅Model更新事件来更新自己。

  • MVC有各种变体, 一种是Controller直接把Model推给View, View自己从Model中取出感兴趣的数据来刷新自己。

对视图更新的处理是MVC和MVP在实现上的主要区别: MVP中View不需要知道Model, Presenter直接操作View。MVC中View知道Model, 自己根据Model来更新自己的状态。

(图片来自: http://msdn.microsoft.com/en-us/library/ff647859.aspx)

跟View相关的另一个常见问题就是可测试性. 即使其它分出去的部分可以独立测试, 但剩下来的View依然Hold住了一部分显示相关的逻辑. 显示逻辑也是逻辑, 也需要测试, 而通常直接测试GUI界面是相对难以测试的. 现有直接测试GUI的测试工具都面临以下问题:

  • 测试耗时长, 因为要启动真实的应用

  • 测试比较脆弱, 无论是可靠性还是可维护性, 因为界面元素的变化很频繁, 而通过编程来控制界面和用户真实操作经常有细微的差别, 尤其是时序相关的问题

一个思路就是把显示逻辑从View中分离, 让View退化为简单的GUI控件的容器. MVP做出了最初的努力, 而另外两个模式更加强调了这一点: Presentation ModelPassive View

分享到:
评论

相关推荐

    09.北京大学-李元春-深度学习在GUI测试中的应用.pdf

    深度学习在GUI测试中的应用可以提高测试效率和代码覆盖率,减少测试时间和成本,并提高软件的质量和可靠性。该技术已经被广泛应用于移动应用、Web应用和桌面应用的测试中,并将继续推动软件测试技术的发展。

    C++ gui qt4 高清版(带详细目录)

    C++ GUI Qt4是开发图形用户界面(GUI)应用程序的一种强大工具,尤其适用于跨平台的桌面应用。Qt4是Qt库的一个旧版本,它提供了丰富的...通过深入学习和实践,你将能够利用C++ GUI Qt4创建出功能强大的图形界面应用。

    基于51单片机GUI设计TFTLCD触摸屏实验软件例程源码-字符数字显示(竖屏).rar

    总的来说,这个实验软件例程是一个宝贵的教育资源,它涵盖了51单片机、TFTLCD触摸屏、GUI设计和C51编程等多个领域,适合电子工程、嵌入式系统开发和物联网应用的学生或从业者学习和参考。通过实践这个例程,开发者...

    MATLAB_GUI仿真在波动光学演示实验中的应用.pdf

    MATLAB GUI仿真技术在波动光学教学实验中的应用是一项创新的研究,该研究...这种结合计算机技术和传统物理实验的教学模式,有助于学生形成系统的物理观念,提高实验操作和问题解决的能力,是教学方法创新的重要方向。

    TFTLCD触摸屏--基于51单片机GUI设计

    在51单片机上实现GUI设计,需要对TFTLCD的驱动电路有深入理解,包括初始化设置、颜色模式配置、像素点的读写等。此外,为了实现触摸功能,还需要与触摸屏控制器进行通信,通常通过I2C或SPI接口。 GUI设计主要包括...

    3 模板模式-课程内容.rar

    6. **模板模式的应用**:列举模板模式在实际项目中的应用案例,如GUI框架、数据库操作等,帮助理解其实际价值。 7. **模板模式与其他设计模式的对比**:对比模板模式与策略模式、工厂模式等其他设计模式的异同,...

    matlab_gui计算器,只有基础运算,如需功能复杂的计算器请慎下载,含详细报告交作业

    MATLAB GUI(图形用户界面)计算器是一种通过交互式界面进行数学计算的应用,它为用户提供了一种简单易用的方式来执行基本的数学运算。本项目提供的MATLAB GUI计算器具有基础的数学功能,适合初学者或者需要简单计算...

    基于CS和BS模式架构的图书管理系统设计

    当前,基于客户端-服务器(Client/Server, CS)模式和浏览器-服务器(Browser/Server, BS)模式的信息系统已经成为主流。 #### 二、CS模式架构 CS模式是一种传统的分布式计算模型,其中客户端(Client)负责用户交互,而...

    MATLAB多方法车牌识别系统(bp+模板+GUI)-毕业设计.zip

    7. **毕业设计**:这个项目作为一个毕业设计,意味着它可能是学生在完成学业时的一个综合性课题,旨在检验和提升学生的编程技能、理论知识应用以及问题解决能力。 通过以上介绍,我们可以理解这个MATLAB车牌识别...

    基于Java的GUI多线程下载器的设计与实现.pdf

    在当前的信息时代,网络资源的下载需求日益增长,这促使了下载器软件的广泛应用。...在众多下载器中,Java语言编写的GUI多线程...通过采用合理的架构设计模式和编程技术,可以构建出功能强大、用户体验良好的下载器软件。

    基于工学结合模式的Matlab软件课程教学改革.pdf

    教学改革涉及教学内容、教学模式和教学方法等方面的重构。 1. 教学内容的构建应依据Matlab编程工作岗位的职业能力需求,结合学生的认知规律和课程的可持续发展性。自编校本教材,并将教学内容分为基础模块、应用...

    nuklear-rust:与Nuklear 2D立即GUI库的绑定

    Nuklear是一个轻量级、高效的库,设计用于为游戏、工具和其他实时应用创建快速、简洁的GUI。通过Nuklear-Rust,开发者可以利用Rust的强大特性和类型安全来构建GUI,同时保持Nuklear的高效性能。 首先,我们来看看...

    基于深度学习的车牌识别GUI项目.zip

    深度学习通过学习样本数据的内在规律和表示层次,使机器能够模仿视听和思考等人类活动,从而解决复杂的模式识别难题。 深度学习的核心是神经网络,它由若干个层次构成,每个层次包含若干个神经元。神经元接收上一...

    java编写的Hannoi塔应用程序

    Hannoi塔游戏通常由三根柱子和若干个不同大小的圆盘组成,玩家需要将所有圆盘从一根柱子移动到另一根柱子,遵循每次只能移动一个盘子且大盘子不能在小盘子之上的规则。此Java程序不仅实现了游戏的基本逻辑,还增加了...

    Java+Swing图形界面开发与案例详解实例代码

    例如,一个简单的GUI应用可能包含一个主窗口(JFrame),在窗口内有若干个按钮和文本框,用户可以通过点击按钮和输入信息来与程序交互。 Swing组件的布局管理器是构建GUI的重要工具。Java Swing提供了多种布局管理...

    《Java程序设计》平台课建设课程改革.pdf

    6. 综合应用模块:此模块致力于提升学生综合应用Java解决实际问题的能力,要求学生结合所学知识进行实际项目的开发,实现软件工程的基本流程,包括需求分析、系统设计、编码实现和系统测试。 7. 混合教学模式:采用...

    数据库系统开发工具PPT学习教案.pptx

    * VB 的三种工作模式:设计模式、运行模式和中断模式。 VB 程序的特点: * 采用面向对象的程序设计方法。 * 程序由若干对象组成。 * 对象的 3 要素:属性、方法、事件。 * 属性:描述对象的性质或特征。 * 方法:...

    课程设计之通讯录管理系统

    8. **设计模式**:在构建这样的系统时,开发者可能会应用设计模式,如工厂模式用于创建联系人对象,单例模式用于管理数据库连接,或策略模式用于实现不同的排序算法。 9. **数据库集成**:虽然描述中没有明确提到,...

Global site tag (gtag.js) - Google Analytics