tal*_*ity 2 php error-handling usability
考虑一个自动构建系统,它将结果存储在数据库中,并通过动态html响应http GET请求提供结果的表格显示.许多不同的用户希望看到结果的不同子集,因此PHP中有解析脚本,每个脚本都接受多个可选的过滤参数和值.例如,(我要离开http部分,所以这里没有人真正点击这个示例网址):
display_results.php?componenent_name = my_comp1&build_type = build_type1&build_owner =弗雷德
即使某些帮助页面上列出了所有可能参数及其允许值的列表,当用户创建请求URL时,他/她可能没有该文档.相反,取决于记忆有效参数(包括其拼写)和允许的值.有时他/她会弄错.
题
从最终用户可用性和开发人员可维护性的角度来看,以下哪个选项最适合响应此类用户错误:
例如,如果数据库包含build_type1和fred和joe的数据,则为三个组件(称为comp1,comp2和comp3)和用户(错误地)写入:
display_results.php?name = comp1,comp2&build_type = build_type1&build_owner = john
我将可用性定义为与广泛使用的,表现良好的Web应用程序的一致性 - 如果用户对那些他们对我正在描述的应用程序感到满意的人感到满意.
我问这个问题是因为我是这类脚本的关键用户,提出了大量的增强请求,并希望得到一些支持以进一步请求.
===关于界面 - 自由格式或"构建器页面".是的,我说的是自由形式.系统中有一个"构建器页面",但(a)它从未提供所有用户似乎想要的所有选项,(b)我无法完成"创建永久链接"增强请求.
===感谢您选择的答案 - 评论中没有足够的空间:
谢谢@ pygorex1!您给出了一个答案,将我的问题置于众所周知的软件构造 - API的上下文中.并且给出了一个很好的(如果可能夸大;-))违反这些原则的影响的例子.最后,有些东西一直困扰着我关于这些脚本的API,当你提到"自我记录"时,你就把它连接起来了.困扰我的是,当有很少的文档(因为它保持最新的成本很高)并且部分结果返回用户错误(我的!)时,我没有学到任何关于系统的知识."自我记录"可能是您推荐的错误处理设计的最简洁的理由.更容易出售给用户和维护者!
这听起来非常像API.良好API的一个标志是具有清晰一致的语法,因此用户可以获得可预测的结果.违反语法应该会导致错误.
即使语法不正确,返回部分结果也是一个糟糕的设计:当用户没有明确说明他们想要什么数据时,很有可能返回的数据不会有用或将被丢弃.更糟糕的是,数据可能被视为处于有效的上下文中,即使它不是.
一个例子.系统旨在忽略无效参数.客户端发送请求所有"A"类型组件的comoponent_name参数(拼写错误component_name).随后,系统返回所有类型的组件('A','B','C'......'Z').客户端将这些结果视为"A"类型,并根据这些结果建立内部计算和业务逻辑.随之而来的是,由于管理层的业务决策主要基于内部数据分析,因此客户首先进入错误的细分市场并破产.
现在,这是世界末日的情景,但它说明了一点:通过明确定义输入和输出,您可以减轻甚至防止系统性错误.
在返回任何数据之前,请验证输入参数.遇到无效参数时,返回解释正确语法的错误消息.这样,系统就可以自我记录并返回可预测的结果.