写点什么

文章:RichClient/RIA 原则与实践(上)

  • 2009-03-16
  • 本文字数:1326 字

    阅读完需:约 4 分钟

Web 领域的经验在过去十多年的不断的 使用和锤炼中,整个开发领域的技术、理念、缺陷已经趋于成熟,它丰富的积累使得开发者逐渐将更多的精力投入到应用本身。但是,目前仍然没有比较深入的实践 性文章来介绍企业环境下 RichClient 开发,而只是偏向于小规模特性介绍,但在大规模的企业应用中,这些小的技巧对于架构决策往往帮助很小。作者在 加入 ThoughtWorks 之后,参加了多个不同的 RichClient 项目的开发工作,使用 / 尝试过的语言包括 Java Swing、Flex/Adobe Air、.NET WinForm/.NET WPF,对于不同平台之间的种种有些体会。在本文中,作者将这些实践和原则进行了总结。

在讲述“一切皆异步”这条原则时,作者说到:

所有耗时的操作都应当异步进行。这是第一条、也是最重要的原则,违背了这条原则将会导致你的应用完全不可用。 考虑这样的一个功能:点击一个"更新股票信息"按钮,系统会从股票市场(第三方应用)获得最新的股票信息,并将信息更新到主界面。丝毫不考虑用户体验的写法:

void updateStockDataButton_clicked() {

stockData = stockDataService.getLatest(); // 从远程获取股票信息
updateUI(stockData); // 这个方法会更新界面
} 那么,当用户点击 updateStockDataButton 的时候,会有什么反应?难说。如果是一个无限带宽、无限计算资源的世界,这段代码直观又易 懂,而且工作的非常好:它会从第三方股票系统读到股票数据,并且更新到界面上。可惜不是。这段代码在现实世界工作的时候,当用户点击这个按钮,整个界面会 冻结──知道那种感觉吗?就是点完这个按钮,界面不动了;如果你在使用 Windows, 然后尝试拽住窗口到处移动,你会发现这个窗口经过的地方都是白的。你的客户不会理解你的程序实际上在很努力的从股票市场获得数据,他们只会很愤怒的说,这 个东西把我的机器弄死了!他们的思路被打断了。于是他们不再使用你的程序,你们的合作没了。你没钱了。你的狗也跑了。

在谈到“视图生命周期管理”时,作者将 Web 开发和 RichClient 开发进行了对比:

在 WEB 开发中,视图的生命周期很短:在进入页面的时候创建,在离开页面的时候销毁。一不小心页面被弄糟了,或者不能按照预期的渲染了,点下刷新按钮,整个世界一片清净。 WEB 下的视图导航也是如此自然。基于超链接的方式,每点击一次,就能够打开一个新的页面,旧的页面被浏览器销毁,新的页面诞生。(这里不考虑 AJAX 或者其他 JavaScript 特效)

如果把这种想法带入到 RichClient 开发,后果会很糟糕。每当点击按钮或者进行其他操作需要导航到新的窗口,你不加任何限制的创建新窗口或者新的视 图。然而 CPU 不是无限的。创建一个新的视图通常是很耗 CPU 和内存的。系统响应会变慢。用户会抱怨,拒绝付钱,于是因为饥饿,你的狗再次离开了你。

每次新创建视图产生的严重后果并不仅仅是非功能性的,还包括功能性的缺失。如果你用过 Skype,当你在给张三通话的时候,再次点击张三并且进行通话,你 会发现刚刚的通话界面会弹出来,而不是开启新窗口。在我们的一个项目中,有一个功能:点击软件界面上的电话号码就能开启一个新窗口,并直接连到桌上的电话 拨号通话。可以想象,如果每次都会弹出新的窗口,软件的逻辑是根本错误的。

查看文章全文 RichClient/RIA 原则与实践(上)

2009-03-16 08:421773

评论

发布
暂无评论
发现更多内容

MySQL 不完全入门指南

Java 编程 架构 面试 架构师

【等保测评】黑龙江等保测评机构详细信息说明

行云管家

网络安全 等保 等级保护 等保测评

一文带你掌握 OceanBase 社区版部署细节及原理

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

如何优雅的在业务中使用设计模式(代码如诗)

小呆呆666

flutter android 大前端 设计模式

多样数字人民币钱包来袭,阻力与动力并存

CECBC

模块一作业

小智

架构实战营

【虚拟机专栏】智能合约执行引擎的前世今生

趣链科技

文件上传绕过思路拓展

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

软件测试框架之——Postman参数化(超详细小白教程)

程序员阿沐

软件测试 自动化测试 接口测试

短视频询盘获客系统开发案例解析

获客I3O6O643Z97

抖音、快手获客系统 抖音矩阵拓客

来了!《中国移动2021智能硬件质量报告》正式发布

终于有大牛把Spring微服务架构设计第2版文档给整理完毕了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

DEX去中心化交易所自动刷量机器人开发|去中心化做市机器人

量化系统19942438797

去中心化 做市机器人

在?进来看看新一季周边到底做点啥?【话题讨论】

气气

话题讨论

解密优酷智能生产技术,看 AI 赋能内容数字化

阿里云CloudImagine

音视频 短视频 视频处理 视频制作 视频云

GraphQL设计思想

Ryan Zheng

graphql

简单、快捷、低成本的超写实虚拟人平台来了……

百度开发者中心

人工智能 AI 最佳实践 虚拟人 前沿技术

零基础入门:基于开源WebRTC,从0到1实现实时音视频聊天功能

JackJiang

音视频 WebRTC 即时通讯 IM

没有7年经验你真学不会这份SpringCloud实战演练文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

华为高级技术专家多年经验分享微服务治理体系、架构及实践文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

论坛接口测试——Postman数据驱动(超详细小白教程)

程序员阿沐

编程 程序员 软件测试 自动化测试 接口测试

译文 | 四张画布教你判断「产品开发优先级」

LigaAI

产品经理 产品开发 画布 产品优先级

🏆「作者推荐」Java技术专题-JDK/JVM的新储君—GraalVM和Quarkus

码界西柚

Java JVM GraalVM 8月日更

立于山巅!他,凭什么抗住万亿级流量冲击!

博文视点Broadview

堡垒机和跳板机的三大区别分析-行云管家

行云管家

运维 堡垒机 IT运维 跳板机

DEX去中心化交易所自动刷量机器人开发|去中心化做市机器人

Geek_23f0c3

去中心化交易所系统开发 量化交易机器人系统开发 量化机器人 做市机器人 自动刷量机器人

20年IT老民工苦心编撰成超大流量分布式系统架构解决方案文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

摩尔时代如何押注AI算力?英特尔战术大揭秘

科技新消息

影像篡改与识别(一):胶片时代

腾讯安全云鼎实验室

影像 暗房技术 篡改识别

webrtc BitrateAllocator 带宽分配器

webrtc developer

WebRTC

由阿里三位专家撰写:数据库高效优化:架构、规范SQL技巧文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

文章:RichClient/RIA原则与实践(上)_Java_陈金洲_InfoQ精选文章