RIA项目失败的教训

2023-11-12

作者 Abel Avram 译者 崔康 发布于 2009年7月22日 上午11时6分

社区
Architecture,
Java
主题
可用性,
用户界面,
RIA,
富客户端/桌面

EffectiveUI公司主席Anthony Franco最近做了一次名为“RIA项目失败的十种方式”的演讲,为想要RIA项目失败的人提供了十条建议。SAP AG的Gerd Waloszek则总结了“糟糕用户界面的18黄金法则”。

以下是Franco提供的十条逆向建议,并解释了为何要避免它们,而应该如何去做:

  1. 如果你想失败,那就不要理解最终用户——70%的IT项目失败都是由于用户可接受性出了问题。
  2. 如果你想失败,那就相信开发人员能够正确的做出设计决定。开发人员被逼迫着做出糟糕的设计,因为他们的工作量是由其所完成的功能数量决定的。当一个项目将要接近截止日期时,开发人员就会关注于删除功能而不是从最终用户的角度思考。
  3. 如果你想失败,那就期望一个银弹式的设计。好主意是值得肯定的,但一个伟大的功能建议不应该取代优秀健康的UI设计。
  4. 如果你想失败,那就满足所有人的需求。“如果一个公司试图为所有人创造一个产品,那么最后不会适用于任何人”。
  5. 如果你想失败,那就启动项目然后忘却。在项目启动之后,产品需要更多的迭代以不断完善。
  6. 如果你想失败,那就不要定义成功。不定义成功意味着不知道目标是什么。
  7. 如果你想失败,那就避免冲突。冲突未必是坏事,因为“没有冲突就没有进步”。当屋子里的所有人都赞同某种看法时,那么就要提高警惕了。
  8. 如果你想失败,那就相信不需要推销自己的想法。利益相关者应该努力在组织内部推销自己的想法,但不要期望仅仅因为来源于你就会被接受。这需要准备回答类似下面的问题:投资回报率如何?优点是什么?为什么要现在做?如果不做会怎么样?
  9. 如果你想失败,那就追求完美。不应该一开始就把所有都计划好,并期望现实会按照计划行事,因为变化无处不在。
  10. 如果你想失败,那就重视过程甚于产品。这条建议可以改写为:“如果你想失败,那就不要冒险”。我们可以非常重视开发过程,但是“按时生产一个糟糕的产品毫无意义”,通过迭代的方法构建满意的产品更轻松一些。

以下是Waloszek总结的糟糕用户界面18黄金法则,提供了负面的例子:

  1. 让客户忙于那些不必要的工作——让用户在某些控件填写数据,随后又提示他们不能在那里输入数据(比如,一个应用让你在假期或周末填写数据,随后又提示说你不能在那些天工作)。
  2. 不遵守标准——不把菜单条目放置在通常的类别和位置上(比如,在“编辑”菜单中放置“保存”按钮)。
  3. 让软件运行缓慢——有无数的可能性导致软件运行缓慢。比如,你可以在每个用户输入之后包含长时间的验证或者切换。或者你可以强制用户浏览一连串的对话框。
  4. 尽可能地使用缩写,特别是在有足够空间显示完整单词的情况下——使用“dat.”而不是“date”,“Tolky”而不是“Tolerance Key”,“NxOb”而不是“Next Object”,等等还有很多......
  5. 使用技术型语言指导用户——使用UTF-8格式发送URL(需要重启,在MS IE的高级设置里)
  6. 隐藏在用户看来重要和常用的功能——把其藏在用户永远找不到的菜单里。
  7. 让你的应用只支持鼠标——绝不提供任何键盘快捷键
  8. 使用你的应用成为一项挑战——即使用户操作会导致严重的后果也不加以提示。
  9. 脱离最终用户——许多用户有许多的选择,你只提供一个。这倒是可以更快更简单的实现。
  10. 宣扬糟糕的示例——只需要听从本页的其他黄金法则就可以实现。
  11. 花费大量精力设置糟糕的缺省参数:与用户的期望背道而驰,缺省配置极其糟糕、令人厌恶、无用——反正由你决定——在web表单上做缺省设置使用户收到不想要的新闻或者广告,散布他们的地址等等。
  12. 在每次系统重新恢复之后都破坏工作上下文——在系统重启之后取消之前选择的屏幕元素。
  13. 忽略让用户更方便的功能——让他们很辛苦——当用户需要在列表中添加条目时,只允许他们在列表末端插入条目,然后再让用户把条目移动到正确的位置。换句话说,没有提供额外的功能用于直接将条目插入到目标位置。为了增加点情趣,当用户直接把条目移动到目标位置时,应用提示一些伪造的错误,然后把条目插入到末尾。
  14. 不让用户中断消耗时间和/或消耗资源的进程——偷偷启动一个备份或者索引进程,让用户难以取消,也就是说,无视用户的鼠标点击和键盘操作。
  15. 应用不合逻辑——添加一个准备某操作的按钮使用户确认可以做该操作了。这里有一个真实例子:在许多电子邮件应用中,“转发”按钮实际上没有真正执行转发操作,而是做转发之前的准备工作(因为,我们不得不提供收件人地址)。
  16. 时不时的来一次系统崩溃或者让应用僵死——让编辑器或者编辑域在用户事先未预料的情况下僵死,以至于用户还没有来得及保存他们的工作成果,而频繁保存的习惯会浪费宝贵的系统资源。
  17. 尽可能的阻碍用户输入——页面加载也是阻碍用户输入的好机会。在等待的时候,用户可能会与室友聊天、读报或者盯着空屏幕发呆。
  18. 阻碍用户输入,即使没有必要——阻碍用户在图片浏览器更新缩略图的时候输入就是一个很好的例子——没有任何理由阻止用户滚动、选择图片或者发起操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RIA项目失败的教训 的相关文章

  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • stdClass 对象在实时站点上有奇怪的怪癖,但在本地计算机上没有[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我创建了一组辅助函数 让我在 php 中进行数据库操作时更加轻松 本质上 我向函数传递一个 stdClass 对象 然后它们使用该
  • JAVA - 如何将一个对象的属性复制到另一个具有相同属性的对象?

    假设我们有一个对象 A 定义如下 public class ObjectA private Attribute a1 private Attribute a2 private Attribute a3 由于某种原因 我需要创建第二个对象 B
  • Hadoop:处理大型序列化对象

    我正在开发一个应用程序来使用 Hadoop 框架处理 和合并 几个大型 java 序列化对象 顺序 GB 大小 Hadoop 存储将文件块分布在不同的主机上 但由于反序列化需要所有块都存在于单个主机上 因此它会极大地影响性能 我该如何处理这
  • Java 中的对象与扩展

    我可能是错的 因为我没有太多的 Java 经验 但这里有一个问题 我有一个包含许多方法的类 基本上它是一个简单的库 我创建了这个类的一个对象MyLibrary obj new MyLibrary parameters 这些参数设置库正确运行
  • 使用递归获取嵌套对象中的所有父对象

    我有以下对象 const object id 1 name a children id 2 name b children id 3 name c id 4 name d 我需要一个接受对象和最后一个子对象的
  • 从现有数组创建新结果

    如果我有一个如下所示的示例数据 我需要从结果数组中获取 FinalResult 数组 let result type Science link www educatorsector com type Sports News link www
  • 是否可以在执行时查看对对象的所有引用?

    有没有办法查看执行时对某个对象的所有引用 我正在使用 Netbeans 其中是否存在此功能 编辑 使用探查器来执行此操作没有问题 我只需要知道引用 无论如何 好的 Netbeans 显示了对一个对象的所有引用 首先 以调试模式运行项目CTR
  • 在 VB.NET 中对对象列表进行排序

    我有一个乘客 对象 列表 它具有不同的属性 passenger name passenger age passenger surname 我想按年龄标准对这个列表进行排序 我该怎么做 我知道在整数 字符串列表中 List Sort 有效 但
  • 如何创建要添加到 JavaScript 对象变量的动态键 [重复]

    这个问题在这里已经有答案了 我正在尝试类似的事情 但这个例子不起作用 jsObj for var i 1 i lt 10 i jsObj key i example 1 我该怎么做才能制作这样的动态密钥 方括号 jsObj key i ex
  • 如何在 PHP 中对数组和数据进行排序?

    这个问题旨在作为有关 PHP 中数组排序问题的参考 人们很容易认为您的特定案例是独特的并且值得提出新问题 但大多数实际上只是此页面上的解决方案之一的微小变化 如果您的问题因与此问题重复而被关闭 请仅在您能解释为什么它与以下所有问题显着不同的
  • 使用另一个对象数组过滤对象数组

    这个问题与这个问题类似Jquery 过滤带循环的对象数组 https stackoverflow com questions 30998424 jquery filter array of object with loop但这次我需要使用对
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 当key未知时如何获取js对象中的属性值

    我有一个对象数组 a 81 25 p 81 25 81 26 p 81 26 我想循环遍历数组并获取值p在每个元素中 for var key in a console log a key outputs 81 25 Object How d
  • 如何动态创建新属性

    如何从对象方法内的给定参数创建属性 class Foo public function createProperty var name val here how can I create a property named var name
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • 如何从 Xib 文件加载自定义 UITableViewCell?

    问题很简单 如何加载自定义UITableViewCell来自 Xib 文件 这样做可以让您使用 Interface Builder 来设计您的单元 由于内存管理问题 答案显然并不简单 这个线程 https stackoverflow com
  • 如何获取对象的所有属性?

    如何在 JavaScript 中使用反射获取对象的所有属性 循环遍历对象并获取属于该对象且不属于该对象的每个键 一个函数 var properties for var key in obj if obj hasOwnProperty key
  • 如何从嵌套的对象数组中获取每个父级的值

    所以我有多个对象数组 每个对象都包含一个子对象 e g const data id 1 name parent 1 children id c1 name child 1 children id g1 name grand 1 childr

随机推荐

  • 【C语言】#文件操作#有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。

    题目 1 有5个学生 每个学生有3门课程的成绩 从键盘输入以上数据 包括学号 姓名 3门课成绩 计算出平均成绩 将原有数据和计算出的平均分数存放在磁盘文件stud中 设5名学生的学号 姓名和3门课成绩如下 在向文件stud写入数据后 应检查
  • Python 正则表达式RE知识学习

    正则表达式 Regular Expression 是一种强大的文本模式匹配工具 常用于在字符串中查找 替换 分割等操作 在 Python 中 可以使用内置的 re 模块来操作正则表达式 ChatGPT编写 下面是一些需要掌握的正则表达式知识
  • 《大五人格心理学》读书笔记

    这本书介绍了一下职场中的大五人格 具有不同人格特质的人适合干不同的工作 了解自己的人格特质 有利于自己的职业规划 了解同事的人格特质 有利于合作 1 宜人性 宜人性的心声 这对他人有什么影响VS 这对我有什么价值 宜人性的子维度 同理心 经
  • Nginx实现404页面的几种方法

    Nginx实现404页面的几种方法 第一种 Nginx自己的错误页面 第二种 反向代理的错误页面 第三种 Nginx解析php代码的错误页面 第四种 指定一个url地址 第一种 Nginx自己的错误页面 Nginx访问一个静态的html 页
  • JAVA单元测试框架-12-java代码重复执行失败的测试用例

    在使用testng执行测试用例时候 都会遇到测试用例执行失败 怎么再次执行失败的测试用例呢 官网给出了java代码执行测试的案例 每次执行完用例后会在test output目录路径下保存执行失败的测试用例 可以再次执行失败的测试用例来达到重
  • QT实现中英文键盘

    使用Qt中实现中英文键盘 支持各种linux嵌入式设备 实现思路 需要一个中文字体库 将字体库加载到一个Hash容器 字母和拼音作为key值 对应的中文作为value值 核心代码 include UKeyBoard h include ui
  • CSDN-markdown编辑器

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • 使用高德地图 vue-amap 中遇到的问题

    1 搜索组件进行搜索的时候 无论搜索哪个城市 地图一直固定在一个城市 我的是深圳
  • 基于Docker环境安装ElasticSearch

    1 搜索技术 搜索技术在我们日常生活的方方面面都会用到 例如 综合搜索网站 百度 谷歌等 电商网站 京东 淘宝的商品搜索 软件内数据搜索 我们用的开发工具 如Idea的搜索功能 这些搜索业务有一些可以使用数据库来完成 有一些却不行 因此我们
  • 【Java进阶篇】—— File类与IO流

    一 File类的使用 1 1 概述 File 类以及本章中的各种流都定义在 java io 包下 一个File对象代表硬盘或网络中可能存在的一个文件或文件夹 文件目录 File 能新建 删除 重命名 文件和目录 但 File不能访问文件内容
  • 数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》

    整个视频打包下载地址 史上最全的数据结构视频教程系列分享之 北风网 C 版数据结构与算法高级教程 转载请保留出处和链接 更多优秀资源请访问 我是码农 数据结构是计算机存储 组织数据的方式 数据结构是指相互之间存在一种或多种特定关系的数据元素
  • Redis可视化工具无法连接Redis(安装在服务器上面)的解决方案

    redis可视化工具连接安装在阿里云上面的redis时 一直连接不上 你可以按下面三步去完美解决 第一 确保redis正常启动 我这主要解决redis可视化工具无法连接redis哈 具体redis安装我就不讲了奥 首先通过指令 cd usr
  • 区块链共识机制技术一——POW(工作量证明)共识机制

    什么是共识机制 所谓 共识机制 是通过特殊节点的投票 在很短的时间内完成对交易的验证和确认 对一笔交易 如果利益不相干的若干个节点能够达成共识 我们就可以认为全网对此也能够达成共识 区块链作为一个去中心化的分布式账本系统 然而在实际运行中
  • RPC通信基本原理 -- 浅析RPC远程过程调用基本原理

    一 RPC基本概念 1 1 RPC简介 RPC 的全称是 Remote Procedure Call是一种进程间通信方式 RPC只是一个概念 而不是具体的协议或框架 它允许程序调用另一个地址空间 通常是共享网络的另一台机器上 的过程或函数
  • 应用布尔盲注来爆库(1)

    先上道练习题Less 8 打开sqli labs项目的练习题Less 8 http 192 168 3 2 sqli labs Less 8 然后输入id 1参数 可以得到以下信息 输入有效id 1时 只提示成功 You are in 没有
  • 基於RISC-V QEMU 仿真運行Linux 系統環境搭建

    前言 文章詳細說明如何從堶零開始基於RISC V QEMU 仿真運行Linux 系統環境搭建 是Linux 小白入門教程不二之選 歡迎留言討論 轉發請注明原文出處 1 準備QEMU 仿真環境 RISC V 64bits 安裝包下載地址 ht
  • 【华为OD机试】猴子爬山 (C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 红米Note 4超简单刷成开发版获取ROOT权限的流程

    小米的设备不同手机型号一般miui论坛都提供两个不同的系统 可分为稳定版和开发版 稳定版没有提供root超级权限管理 开发版中就开启了root超级权限 较多时候我们需要使用的一些功能强大的应用 都需要在root超级权限下工作 举个栗子我们团
  • python 列表(list)排序

    使用python的sorted函数 可对列表进行排序 该函数默认从小到大排序 1 列表中为普通元素 a 80 85 90 100 a sorted a sorted函数默认从小到大排序 print a 输出结果 80 85 90 100 倒
  • RIA项目失败的教训

    作者 Abel Avram 译者 崔康 发布于 2009年7月22日 上午11时6分 社区 Architecture Java 主题 可用性 用户界面 RIA 富客户端 桌面 EffectiveUI公司主席Anthony Franco最近做