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