写点什么

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

评论

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

Linux之select、poll、epoll讲解

java易二三

Linux 程序员 计算机

推荐工具!使终端便于 DevOps 和 Kubernetes 使用

SEAL安全

git Kubernetes zsh DevOps工具 企业号 8 月 PK 榜

简洁又优雅!Controller层代码就该这么写!

java易二三

Java 程序员 面试 计算机 八股文

技术分享 | kill掉mysqld_safe进程会影响mysqld进程?

GreatSQL

数据库 greatsql社区

落地大模型应知必会(3): 如何构建多任务的LLM应用

Baihai IDP

人工智能 AI LLM 白海科技 落地大模型应用

矩阵起源入选《2023中国数据库领域最具商业合作价值企业盘点》

MatrixOrigin

数据库 云原生 超融合 MatrixOrigin 矩阵起源

技术分享 | app自动化测试(Android)--显式等待机制

霍格沃兹测试开发学社

Health Kit基于数据提供专业方案,改善用户睡眠质量

HarmonyOS SDK

HMS Core

Spring 中 @Qualifier 注解还能这么用?

江南一点雨

Java spring

SpringBoot3安全管理

Java spring springboot springsecurity SpringBoot3

AREX Agent 插件开发指南

AREX 中文社区

开源 Java Agent 自动化测试 Mock测试框架 流量回放

go的net/http有哪些值得关注的细节?

java易二三

Java 数据库 程序员 计算机

对线面试官:Redis 夺命连环 38 问,你能抗住多少?

java易二三

redis 程序员 面试 后端 计算机

一点就通,解析直播源码拉流技术

山东布谷网络科技

基于飞桨图学习框架实现的城市地点动态关系挖掘

飞桨PaddlePaddle

人工智能 paddle 百度飞桨 开发者说

LangChain系列-02. LLM基础

无人之路

openai ChatGPT langchain

秒杀库存解决方案

Java研究者

架构 高性能 秒杀 电商系统 库存系统

华为云classroom赋能--Devstar使应用开发无需从零开始

DevOps 软件开发

数科公司转型,从IT运维向价值运营转变

用友BIP

数科公司

《Java极简设计模式》第01章:单例模式(Singleton)

冰河

Java 程序员 设计模式 架构师 java基础

智奇数美:用下沉思维做产品,深挖呼叫中心产业新蓝海

江湖老铁

职场新人如何避免陷入成长陷阱

老张

职场成长 职场经验

AIGC热潮涌动 HashData如何降低大模型应用门槛?

酷克数据HashData

一键登录是如何在登录方式中脱颖而出的?

MobTech袤博科技

前端 前端开发 APP开发 秒验 一键登录

接口测试框架实战(一) | Requests 与接口请求构造

霍格沃兹测试开发学社

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

山东布谷科技

nginx 软件开发 服务器 源码搭建 直播软件源码

对线面试官 - TCP经典面试题

派大星

TCP/IP Java 面试题

传统企业的智能化IPD(产品集成开发)转型

禅道项目管理

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