本篇文章来自老板的一次分享,分享给大家
我们在实现一个新功能时,往往是考虑功能的难点,只要能攻克难点,就认为完成了,而真正的开发必定要包括最重要的错误设计部分,也就是一个App可靠的关键之处。
这里提出一个“面向错误设计”的概念,就是在设计之前,考虑清楚各种出错的地方(无论是格式错误,网络错误,返回值错误,用户操作打断,App崩溃),不用等到测试中发现大量遗漏的分支而造成后期混乱,如果没有想清楚错误分支,就不要着急实现代码。
比如设计“通讯录上传功能”:
IF (正确) 流程:顺利地获得系统授权,在良好的Wi-Fi网络下,瞬间把数据提交到服务器,返回200状态码,数据呈现给用户。
但实际上可能面临的错误有:
没有授权
授权后又取消了授权
上传过程中超时失败
上传过程中返回上一页
后台在自动重试时,用户手工又触发了一次上传
二次点击触发两次或多次上传
通讯录异常庞大可能导致的请求问题
手机更换了主人和整个通讯录
新增和修改了联系人
通讯录权限,是针对用户的,不代表所有登录账户都上传通讯录,否则家人朋友在自己手机上登录,就获得了全部通讯录推荐
应允许用户在APP中撤销通讯录,服务器清理数据不再推荐一度和二度关系
数据格式问题,空的名称,错误的电话格式
甚至上传过程中注销账户
问题可能会比较多,实际上良好的设计模式可以一并解决多个问题,但这已经不是代码编写能力的范畴,而是理解使用场景,使用想象力开发的过程,这也是我认为的进阶过程。
面向错误设计是一个设计思路,是为目的服务的一种手段,究其根本是弄清楚我们开发的目的和出发点,目的会决定我们的行为。
当我们的目的是完成功能时,会很希望用户的使用场景是完美的(网络良好,不乱点击,不乱返回,不Crash),好让我们尽快完成这个功能,任何影响完成功能的出错情况,容易被主观地忽视,不愿去想。
而面向错误设计,要求我们将目的从“完成功能”转变为“为用户提供可靠的服务”,后者才是我们追求的东西,而妥当考虑各种错误返回值和 ELSE 分支,正是向用户提供可靠服务的手段。