【发布时间】:2010-10-19 05:49:10
【问题描述】:
我知道默认答案是“视情况而定”,但我想知道您在开发一个好的应用程序时使用的功能列表。
我对在设计时需要关注的功能特别感兴趣,因为延迟添加它们会花费我们很多。
请为每个答案列出一项功能,以便我们投票选出最重要的功能。
我们将不胜感激任何额外的信息,例如您自己的战争故事。
我问这个问题是为了从零开始改进我的应用程序,我认为我不是唯一一个有这个目标的人,所以请写出你认为应该存在于一个好的应用程序中的任何功能。
【问题讨论】:
我知道默认答案是“视情况而定”,但我想知道您在开发一个好的应用程序时使用的功能列表。
我对在设计时需要关注的功能特别感兴趣,因为延迟添加它们会花费我们很多。
请为每个答案列出一项功能,以便我们投票选出最重要的功能。
我们将不胜感激任何额外的信息,例如您自己的战争故事。
我问这个问题是为了从零开始改进我的应用程序,我认为我不是唯一一个有这个目标的人,所以请写出你认为应该存在于一个好的应用程序中的任何功能。
【问题讨论】:
从用户故事设计,故意推迟数据库设计决策,直到至少创建顶层故事的第一个剪辑。很多时候,各种用户过程的组件被关系完整性和表维护过程的要求所扭曲。我们多久看到一次新的销售订单被输入,用户需要浏览多个表格来填写客户详细信息(有时需要电话和/或未知的虚假数据),实际上不是的必填字段,信用真正来自另一个部门的信息,由于信息不完整而被取消的条目,发现了几页,等等。
很少有人维护和审查可用性指标,例如导航的页面、输入的按键、中断的任务;尽管客户的使命和用户的生产力应该是软件质量的主要决定因素。
【讨论】:
Unicode 支持,因为您的表示层编码为 ISO-8859-1 而您的持久层编码为 UTF-8 没有好处。
【讨论】:
日志记录和错误处理
【讨论】:
崩溃报告,因为它会崩溃,并且开发团队需要知道它何时会崩溃,这样您就可以随时掌握问题...
【讨论】:
快捷键(ctrl-f等...)
【讨论】:
搜索。搜索文本框应该很容易找到,结果应该尽可能好。
【讨论】:
性能(如果您愿意,可以将其解读为延迟)。
尽管无数人大喊过早的优化,但这只是一个简单的功能需求。与众不同并以更好的质量(或性能设计,而不是过早的优化选择器)来挑战。
世界上没有其他项目比 Java 和 CLR 中的类似 VM 的解决方案更需要性能改造。这是他们的每个产品、技术、版本,当然还有膨胀的一个明显的工件:.NET 3.5 和 Oracle 200MB 客户端 (lol)。
VM 只是吸收每个新功能的性能、版本和构建应用程序,而您确实需要 Cray。
可扩展性是完全不同的故事,但是伙计们,人们不会使用高延迟应用程序和大多数 CLR 应用程序(除了简单且 60% 的时间不适用的 Web 内容,比如这个网站/应用程序) 就是这样。加载一些严重的东西,您将运行到非托管办公室、非托管 IDE、非托管数据库、非托管游戏、非托管浏览器等等。
应该有人用蝙蝠敲打 GC 爱好者并告诉他们醒来..
【讨论】:
自动化 - 如果应用程序不需要 UI 来操作,则启用使用命令行或脚本执行的能力。发现了许多优秀的 FTP 工具(也包括存档工具),它们基本上不需要 UI 来完成预期的工作,但不能编写脚本或没有命令行功能。
【讨论】:
撤消
每个应用程序(除了那些,如编译器,没有交互式用户界面的应用程序)都应该跟踪每个用户事件(导航、修改文档和首选项等),以便用户可以从当前状态回溯。
即使没有可变数据的应用程序通常仍然允许用户导航。浏览器“后退按钮”是撤消功能的一个很好的例子。
【讨论】:
可测试性。当您拥有这些时,模块化、关注点分离、重用、正确的错误处理和许多其他好东西就免费了。
【讨论】:
无鼠标操作:在可行的范围内,应用程序应便于用户在不使用鼠标的情况下与其进行交互。 (可用性、可访问性下的文件。)
这并不一定意味着要竭尽全力支持无鼠标使用;更多只是避免在不需要的地方强制使用鼠标。例如,在 Web 表单中按 Enter 时不要破坏默认的表单提交行为,除非您打算用它做一些更有用的事情。
【讨论】:
可用性 - 无论我们的应用程序的可扩展性和无错误性如何,其成功通常取决于最终用户对它的喜爱程度。它可以在下面像垃圾一样编码,但如果它易于使用且非常直观易学,它仍然是赢家。
永远不要忘记,对于最终用户来说,UI就是程序。使高度可用性成为您所有应用程序的一项功能。
cmets 中的某个人询问如何将可用性作为一项功能来实现 - 不幸的是,这不是您可以提出功能请求的东西(例如,“使该网站可用”),但它更像是一套您应该遵循的指导方针设计你的 UI,很像你在编码过程中遵循的准则,使你的程序可扩展。
这篇文章几乎没有足够的空间。我强烈推荐 Don't Make Me Think by Steve Krug 作为任何关注可用性的人的起点。
【讨论】:
* 最近的操作/热门操作 *
我喜欢这个功能,无论我在哪里看到它:
即使我在 Reddit 这样的网站上,我们中的许多人也会搜索评论最多的内容,因为那是有趣的内容。
例如,我希望它是答案的默认值,因为这个答案将被忽略! :)
【讨论】:
收件箱
虽然看起来很小,但对应用程序的可用性和性能也有很大的影响
想象一下,如果用户可以询问一份可能需要几分钟才能生成的繁重报告,
他可以选择“当最新报告准备就绪时向我发送最新报告”,而不是“点击并等待”
【讨论】:
国际化。
事后添加它可能会很昂贵
潜在的陷阱:
【讨论】:
标记
不仅适用于以社区为中心的应用程序,还适用于业务线应用程序 通过允许标记,员工可以创建带有 'Watch this' 的新标签,他可以将其附加到学生记录、收到收据等...
【讨论】:
报告
因为运行一个从数据库中几乎每个表中读取数据的报表总是很痛苦
我曾经看过一个关于数据仓库的数据库设计模式的演示文稿(我再也找不到了),带有亚马逊展示
解决方案之一是制作一个特殊的非规范化数据库,每隔一段时间向其发布报告
【讨论】:
用户界面/体验设计 许多技术创新都依赖于 UI 设计将其技术复杂性提升为可用产品。单靠技术 [通常] 并不能赢得用户的认可和随后的适销性。
来自IBM:
在软件开发中,设计是 被广泛误解和低估。 通常没有明确的用户界面 设计是分开完成的 代码。迭代设计就变成了 重新编码。这是一个短视 策略,因为它会导致 正在编写更多的代码 从长远来看。因为设计是 不可避免,真正的问题是 它隐含在软件中 正在开发,或明确和 分别捕获。有用的辩论 是关于如何做好设计工作, 以及如何以最佳方式捕捉它 与那些沟通的人的表格 实现它。
【讨论】:
评论。 实施内部标准评论系统(首先,记录它!) - 自动评论文档系统可能是正确的,或者只是一组标准程序标题 cmet 和评论约定。让程序员提前知道您希望如何对代码进行注释。进行跨程序员代码审查,检查可读性/可理解性并着眼于未来的修改:如果您是下一个编写此代码的人,这对您有意义吗?
【讨论】:
简单 - 以尽可能少的点击完成用户想要和期望的事情。
Stackoverflow 就是一个很好的例子。界面没有加载chrome。网站上最大的图形大约是 3k。
【讨论】:
默认输入焦点:在任何期望用户进行任何输入的界面演示中,输入焦点应默认为他们最有可能开始输入的位置。 (这是可用性区域中的一个特定功能。)
在 Web 表单的情况下,不幸的是需要注意,如果在选中焦点默认值时用户已经开始输入,则焦点默认值也不应该干扰用户。
(无耻插件:我维护some generalized Javascript that addresses this for Web forms。)
【讨论】:
安全。很有趣,如果不足为奇的话,这是第十四个答案。
【讨论】:
内省:系统以编程方式对其自身结构和行为做出预测性决定的能力。 (类似于语言级别的反射,是可扩展性的关键元素。)
【讨论】:
界面复杂性分层,最常见和最理想的操作非常简单且易于执行,而不太常见和不太理想的操作则通过更高的复杂性实现。
【讨论】:
回归测试:能够轻松、定期地验证关键功能元素在系统修改后继续按预期执行。 (这是“可扩展性”的一个更具体的元素。)
【讨论】:
就我个人而言,我没有给予它应有的意图的好功能是
可扩展性
它帮助我的应用程序社区成长——这对营销和技术都有好处
它可以帮助我专注于我的核心业务,并让用户自行构建很酷的功能
【讨论】:
模块化 - 生产力 - 可扩展性
这就是 - 比方说 - Smart Client Software Factory 的总体设计目标。它有效。
【讨论】: