【问题标题】:What features any good application should care about 'By-Design' [closed]任何好的应用程序都应该关心“按设计”的哪些功能[关闭]
【发布时间】:2010-10-19 05:49:10
【问题描述】:

我知道默认答案是“视情况而定”,但我想知道您在开发一个好的应用程序时使用的功能列表。

我对在设计时需要关注的功能特别感兴趣,因为延迟添加它们会花费我们很多。

请为每个答案列出一项功能,以便我们投票选出最重要的功能。

我们将不胜感激任何额外的信息,例如您自己的战争故事。

我问这个问题是为了从零开始改进我的应用程序,我认为我不是唯一一个有这个目标的人,所以请写出你认为应该存在于一个好的应用程序中的任何功能。

【问题讨论】:

    标签: design-principles


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        日志记录和错误处理

        【讨论】:

        • ?我不记得上次我查看登录除了服务器应用程序之外的任何东西是什么时候,我正在为其编写代码。这确实是开发人员的回应。
        • 这很重要。如果您没有良好的错误反馈,您就无法维护和扩展您的应用程序,无论您的用户是否理解,他们都需要您能够维护和扩展您的应用程序。
        • 我想这就是说,从长远来看,开发支持功能与用户体验功能相当重要。
        • @chaos:正是我的意思。基本上,它几乎是我能想到的唯一可以应用于任何项目的功能,并且始终提供良好的投资回报。低头看其他答案,在很多情况下它们并不重要。
        • 请至少做对一个!
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

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

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

              VM 只是吸收每个新功能的性能、版本和构建应用程序,而您确实需要 Cray。

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

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

              【讨论】:

              • .NET 不使用虚拟机。 JIT 编译有很大不同。
              • .Net 使用虚拟机,IL 架构针对基于堆栈的虚拟 PC 架构,但事实上 IL(中间字节码)被编译为本机代码,而不是有时在没有任何解释的情况下被解释sanboxing,让 .Net 不再是真正的虚拟机。
              • 我希望看到针对 C++ 的 .NET 的某种真实世界性能测试(涉及开发时间)。但我怀疑是否有人会用两种语言编写适当的应用程序,只是为了看到区别。
              • 这个问题stackoverflow.com/questions/145110/c-performance-vs-java-c有一些很好的讨论。
              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                撤消

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

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

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    【解决方案11】:

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

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

                    【讨论】:

                      【解决方案12】:

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

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

                      cmets 中的某个人询问如何将可用性作为一项功能来实现 - 不幸的是,这不是您可以提出功能请求的东西(例如,“使该网站可用”),但它更像是一套您应该遵循的指导方针设计你的 UI,很像你在编码过程中遵循的准则,使你的程序可扩展

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

                      【讨论】:

                      • 类似于“可扩展性”的模糊性。我们应该添加哪些特定功能以使我们的应用程序可用?
                      • @chaos 我同意你的观点,但与此同时,如果你开始考虑可用性的时间晚了,你就会把头发拉下来 :) 我说的是“管理员应该访问他的最近编辑的项目”
                      【解决方案13】:

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

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

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

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

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

                      【讨论】:

                        【解决方案14】:

                        收件箱
                        虽然看起来很小,但对应用程序的可用性和性能也有很大的影响 想象一下,如果用户可以询问一份可能需要几分钟才能生成的繁重报告,
                        他可以选择“当最新报告准备就绪时向我发送最新报告”,而不是“点击并等待”

                        【讨论】:

                          【解决方案15】:

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

                          潜在的陷阱:

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

                          【讨论】:

                            【解决方案16】:

                            标记

                            不仅适用于以社区为中心的应用程序,还适用于业务线应用程序 通过允许标记,员工可以创建带有 'Watch this' 的新标签,他可以将其附加到学生记录、收到收据等...

                            【讨论】:

                              【解决方案17】:

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

                              【讨论】:

                                【解决方案18】:

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

                                来自IBM

                                在软件开发中,设计是 被广泛误解和低估。 通常没有明确的用户界面 设计是分开完成的 代码。迭代设计就变成了 重新编码。这是一个短视 策略,因为它会导致 正在编写更多的代码 从长远来看。因为设计是 不可避免,真正的问题是 它隐含在软件中 正在开发,或明确和 分别捕获。有用的辩论 是关于如何做好设计工作, 以及如何以最佳方式捕捉它 与那些沟通的人的表格 实现它。

                                【讨论】:

                                  【解决方案19】:

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

                                  【讨论】:

                                    【解决方案20】:

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

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

                                    【讨论】:

                                      【解决方案21】:

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

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

                                      (无耻插件:我维护some generalized Javascript that addresses this for Web forms。)

                                      【讨论】:

                                        【解决方案22】:

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

                                        【讨论】:

                                          【解决方案23】:

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

                                          【讨论】:

                                            【解决方案24】:

                                            界面复杂性分层,最常见和最理想的操作非常简单且易于执行,而不太常见和不太理想的操作则通过更高的复杂性实现。

                                            【讨论】:

                                              【解决方案25】:

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

                                              【讨论】:

                                                【解决方案26】:

                                                就我个人而言,我没有给予它应有的意图的好功能是
                                                可扩展性


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

                                                【讨论】:

                                                • 显然这很重要,但它非常含糊(甚至怀疑它是否真的是一个“功能”)并且并没有真正告诉任何人他们应该做什么来制作他们的应用程序可扩展。我试图通过添加有助于可扩展性的特定答案来解决这个问题。
                                                【解决方案27】:

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

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

                                                【讨论】:

                                                  猜你喜欢
                                                  • 2010-12-27
                                                  • 2011-10-21
                                                  • 1970-01-01
                                                  • 2020-05-02
                                                  • 2012-11-29
                                                  • 2010-12-18
                                                  • 2013-06-13
                                                  • 2010-09-27
                                                  • 2011-01-30
                                                  相关资源
                                                  最近更新 更多