10

I know that the default answer is "it depends", but I want to know the feature list you are working from in developing a good application.

I'm particularly interested in features that need to be cared about at design time because adding them late will cost us a lot.

Please list one feature per answer so we can vote for the most important features.

Any extra info, like your own war stories, will be appreciated.

I ask this question to enhance my application from day zero, and I think I'm not the only one with this target, so please write whatever feature YOU think should be exist in a good application.

4

27 回答 27

14

Logging and error handling

于 2009-04-13T22:49:21.390 回答
9

安全。很有趣,如果不足为奇的话,这是第十四个答案。

于 2009-04-13T23:27:37.213 回答
9

用户界面/体验设计许多技术创新依赖于 UI 设计来将其技术复杂性提升为可用产品。仅靠技术 [通常] 并不能赢得用户的认可和随后的适销性。

来自IBM

在软件开发中,设计被广泛误解和低估。通常没有明确的用户界面设计与代码分开进行。然后迭代设计变成了重新编码。这是一种短视的策略,因为从长远来看,它会导致编写更多的代码。因为设计是不可避免的,真正的问题是它是隐含在正在开发的软件中,还是显式地单独捕获。有用的辩论是关于如何做好设计工作,以及如何以最佳形式捕捉它以便与实施它的人交流。

于 2009-04-13T23:54:44.480 回答
8

国际化
事后添加它可能会很昂贵

潜在的陷阱:

  • 非英语操作系统(例如,不要假设“Program Files”目录名称)
  • 参考数据(翻译显示文本)
  • 图片(图片中的文字需要翻译)
  • UI 布局(翻译后填充较长的文本)
  • 多语言安装程序、EULA 等
  • 硬编码字符串!
  • 未指定特定于文化的格式化程序
  • 货币,时间本地化(例如使用逗号与货币句点)
  • 设计方法:嵌入式资源与附属程序集(即“语言包”)
  • 数据库设计:如何存储/查找特定于语言的值
于 2009-04-13T23:16:26.583 回答
6

就我个人而言,我没有给出它应该采取的意图的好特性是
可扩展性


它帮助我的应用程序社区成长——这对营销和技术方面都有好处,它帮助我专注于我的核心业务,并将很酷的功能留给用户构建

于 2009-04-13T22:53:58.977 回答
4

搜索。搜索文本框应该很容易找到,并且结果应该尽可能好。

于 2009-04-13T22:54:39.990 回答
4

从用户故事设计,故意推迟数据库设计决策,直到至少创建顶层故事的第一个剪辑。很多时候,各种用户过程的组件被关系完整性和表维护过程的要求所扭曲。我们多久看到一次新的销售订单被输入,用户需要浏览多个表格来填写客户详细信息(有时需要电话和/或未知的虚假数据),实际上不是的必填字段,信用真正来自另一个部门的信息,由于信息不完整而取消的条目发现了几页深,等等。

很少有人维护和审查可用性指标,例如导航页面、输入的按键、中断的任务;尽管客户的使命和用户的生产力应该是软件质量的主要决定因素。

于 2009-04-13T23:11:41.010 回答
4

可测试性。当你拥有它时,模块化、关注点分离、重用、正确的错误处理和许多其他好东西就免费了。

于 2009-04-14T02:10:53.123 回答
4

可用性——无论我们的应用程序多么可扩展和无错误,它的成功通常取决于最终用户对它的喜爱程度。它可以在下面像垃圾一样编码,但如果它易于使用且非常直观易学,它仍然是赢家。

永远不要忘记,对于最终用户来说,UI就是程序。使高度可用性成为您所有应用程序的一项功能。

评论中有人问如何将可用性作为一项功能实现——不幸的是,这不是您可以提出功能请求的东西(例如,“使该网站可用”),但它更像是您在设计 UI 时应遵循的一组指导方针,就像您在编码过程中遵循的使您的程序可扩展的准则一样

这篇文章几乎没有足够的空间。我强烈推荐Steve Krug 的 Don't Make Me Think作为任何关注可用性的人的起点。

于 2009-04-13T23:17:10.247 回答
3

快捷键(ctrl-f 等...)

于 2009-04-13T22:55:32.890 回答
3

界面复杂度分层,最常见和最理想的动作执行起来非常简单和明显,而不太常见和不太理想的动作通过更大的复杂性来实现。

于 2009-04-13T23:14:17.243 回答
3

无鼠标操作:在可行的范围内,应用程序应便于用户在不使用鼠标的情况下与其进行交互。(可用性、可访问性下的文件。)

这并不一定意味着要竭尽全力支持无鼠标使用。更多只是避免在不需要的地方强制使用鼠标。例如,在 Web 表单中按 enter 时不要破坏默认的表单提交行为,除非您打算用它做一些更有用的事情。

于 2009-04-13T23:45:03.003 回答
3

* 最近的动作/热门动作 *

我喜欢这个功能,无论我在哪里看到它:

  • 维基百科 - 刚刚改变了什么?
  • 堆栈溢出 - 真正活跃的问题在哪里(行动在哪里!)
  • 博客/收件箱 - 几乎每个博客都以这种方式排序是有原因的

即使我在 Reddit 这样的网站上,我们中的许多人也会搜索评论最多的东西,因为那是有趣的东西。

例如,我希望它是答案的默认值,因为这个答案将被忽略!:)

于 2009-04-14T00:58:06.293 回答
2

撤消

每个应用程序(除了那些,像编译器,没有交互式用户界面的应用程序)都应该跟踪每个用户事件(导航、修改文档和首选项等),以便用户可以从他的当前状态回溯。

即使没有可变数据的应用程序通常仍然允许用户导航。浏览器“后退按钮”是撤消功能的一个很好的例子。

于 2009-04-14T00:18:10.537 回答
2

简单性- 尽可能少的点击做用户想要和期望的事情。

Stackoverflow 就是一个很好的例子。界面没有加载chrome。网站上最大的图形大约是 3k。

于 2009-04-13T23:44:56.093 回答
2

自动化- 如果应用程序不需要 UI 来操作,则启用使用命令行或脚本执行的能力。发现了许多优秀的 FTP 工具(也包括存档工具),它们基本上不需要 UI 来完成预期的工作,但不能编写脚本或没有命令行功能。

于 2009-04-14T01:08:06.673 回答
1

性能(如果您愿意,可以将其读作延迟)。

尽管无数人都在大喊过早的优化,但这只是一个简单的功能需求。与众不同并以更好的质量(或性能设计,而不是过早的优化选择器)来挑战。

世界上没有其他项目比 Java 和 CLR 中的类似 VM 的解决方案更需要性能改造。这是他们每个产品、技术、版本和当然膨胀的一个明显的工件,称为:.NET 3.5 和 Oracle 200MB 客户端(大声笑)。

虚拟机只是吸收每一个新功能的性能,版本和构建应用程序,你真的需要一个 Cray。

可扩展性是完全不同的故事,但是伙计,人们只是不会使用高延迟应用程序和大多数 CLR 应用程序(除了简单且 60% 的时间不适用的 Web 内容,比如这个站点/应用程序)只是那。加载一些严重的东西,你将运行到非托管办公室、非托管 IDE、非托管数据库、非托管游戏、非托管浏览器等等。

有人应该用蝙蝠敲打 GC 爱好者并告诉他们醒来。

于 2009-04-13T23:03:33.213 回答
1

内省:系统以编程方式对其自身结构和行为做出预测性决定的能力。(类似于语言级别的反射,是可扩展性的关键要素。)

于 2009-04-13T23:21:48.770 回答
1

收件箱
虽然看起来很小,但它确实对应用程序的可用性和性能影响
很大'他可以选择'当最新报告准备好后给我发送'

于 2009-04-14T00:34:00.720 回答
1

输入焦点默认:在任何期望用户进行任何输入的界面演示中,输入焦点应默认为他们最有可能开始输入的位置。(这是可用性区域中的一个特定功能。)

在 Web 表单的情况下,不幸的是,需要注意的是,如果在选中焦点默认值时他们已经开始输入,则焦点默认值也不应该干扰用户。

(无耻的插件:我维护了一些通用的 Javascript 来解决 Web 表单的问题。)

于 2009-04-13T23:40:45.073 回答
0

模块化 - 生产力 - 可扩展性

这就是Smart Client Software Factory的总体设计目标。它有效。

于 2009-04-13T22:58:13.320 回答
0

崩溃报告,因为它会崩溃,并且开发团队需要知道它何时会崩溃,这样您就可以随时掌握问题......

于 2009-04-13T22:58:40.667 回答
0

回归测试:能够轻松、定期地验证关键功能元素在系统修改后继续按预期执行。(这是“可扩展性”的一个更具体的元素。)

于 2009-04-13T23:17:43.633 回答
0

报告
,因为运行一个从数据库中几乎每个表中读取数据的报告总是很痛苦
我曾经看过一个关于数据仓库的数据库设计模式的演示文稿(我再也找不到它了),其中亚马逊展示
了解决方案是制作一个特殊的非规范化数据库,每隔一段时间向它发布报告

于 2009-04-14T00:01:13.323 回答
0

标记

不仅在以社区为中心的应用程序中,而且在业务线应用程序中通过允许标记,员工可以创建带有“观看此”的新标签,他可以将其附加到学生记录、收到收据等...

于 2009-04-14T00:08:12.327 回答
0

注释。 实施内部标准评论系统(首先,记录它!) - 自动评论文档系统可能是正确的,或者只是一组标准程序标题评论和评论约定。让程序员提前知道您希望如何对代码进行注释。进行跨程序员代码审查,检查可读性/可理解性并着眼于未来的修改:如果您是下一个处理此代码的人,这对您有意义吗?

于 2009-04-13T23:48:58.160 回答
0

Unicode 支持,因为您的表示层编码为 ISO-8859-1 而您的持久层编码为 UTF-8 没有好处。

于 2009-04-15T15:46:48.410 回答