AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

文章: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:421620

评论

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

Redis面试总结

TimeFriends

8月月更

开源一夏|OpenHarmony中FA模型中应用包结构的参数

坚果

开源 OpenHarmony 8月月更

Android进阶(十四)Android Adapter详解

No Silver Bullet

android Adapter 8月月更

使用 Kitten 开发一款趣味成语接龙游戏

汪子熙

少儿编程 scratch 8月月更 kitten 成语接龙

物联网数据正在改变世界

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

什么是操作系统?

Jackpop

Android进阶(十三)json应用

No Silver Bullet

json android 8月月更

相辅相成!沈子瑜掌舵魅族科技,互相协同迈入多终端互联生态

极客天地

小菜鸟河北联通上岗培训随笔

乌龟哥哥

8月月更

Java 中使用 public,private 和 protected 修饰的方法

HoneyMoose

大佬,还记得设计模式的六大设计原则吗?

知识浅谈

设计原则 8月月更

新专利曝光,魅族 19 热帖发布!魅族不断布局出行科技圈

极客天地

Kruise Rollout:灵活可插拔的渐进式发布框架

阿里巴巴云原生

阿里云 开源 云原生 OpenKruise

MyBatis(二、基础进阶)

mybatis springmvc 8月月更

IntelliJ IDEA 打开近期工作的项目的对话框的快捷键

HoneyMoose

魅族与星纪时代合作,沈子瑜透露品牌计划!补全消费者业务布局成关键

极客天地

云原生(十六)| Kubernetes篇之深入RC、RS、DaemonSet、StatefulSet

Lansonli

云原生 8月月更

兄弟携手!魅族与星纪时代共同发力出行领域,沈子瑜成舵手

极客天地

STM32入门开发 采用IIC硬件时序读写AT24C08(EEPROM)

DS小龙哥

8月月更

头脑风暴:零钱兑换2

HelloWorld杰少

算法 LeetCode 8月月更

一篇就够:高性能推理引擎理论与实践(TensorRT)

AIWeker

深度学习 推理引擎 签约计划第三季 TensorRT

Java参数传递到底是按 值传递 还是 引用传递 ?

史俊锋在搬砖

Java 后端 编程基础 签约计划第三季

[极致用户体验] 我做的《联机五子棋》是如何追求极致用户体验的?(上)

HullQin

CSS JavaScript html 前端 8月月更

明年 Flyme 就上车?魅族与星纪时代战略合作后,携手发力出行领域

极客天地

RocketMQ事务消息

急需上岸的小谢

8月月更

介绍一个python工程师必须掌握的 CentOS 命令,nohup

梦想橡皮擦

Python 爬虫 8月月更

大融合!魅族星纪时代达成战略合作,董事长沈子瑜透露未来大动作

极客天地

基于EFK的Kubernetes日志采集方案

Albert Edison

Kubernetes EFK 签约计划第三季 日志收集架构

网络编程(二)TCP/IP

Albert Edison

网络编程 网络 TCP/IP 8月月更

用第一性原理根治数字化转型雾霾:以规则的确定性应对结果的不确定性

王和全

数字化转型 软件开发技术的第一性原理 签约计划第三季

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