工程开发中的用户体验
移交工程给其他开发者时,如果需要花大半天时间去讲解代码,做所谓的「对接」,就得思考一下这工程开发得是否足够失败了。
个人觉得工程开发其实和做产品没有差别,一个目的就是让用户更方便地使用,在工程开发中,「用户」实际上就是除自己以外的开发者。
非常喜欢 Objective-C
的命名方式,配合 Xcode
智能而优雅的编辑功能,实际开发中,对大部分方法几乎不需要额外查阅文档,长长的方法名使使其表征意义一目了然。这应该就是 Objective-C
的体验观吧。
现象
说说在 Android 开发中看到的一些现象
Handler 的滥用
作为一个消息传递机制,Handler 主要是为了解决多线程的问题。在同一个 UI 线程中,把明明可以直接执行的方法经过消息机制绕了一圈才调用,接盘的开发者不明就里,应该是可以感觉到满满的恶意的。
基类的滥用
dry,本来是一件好事情。所谓基类,顾名思义所有派生类共同的东西,才能存在在基类之中。基类的滥用,会给后期解耦带来十分大的困难。
接口不规范
接口不规范,导致的问题就是,啥事都得问其他人,或者仔细阅读代码,默默地就损失了很多时间。
方案
大多用户都不知道自己要做什么,没有被引导、被约束的用户是迷茫的。
引导
- 良好的,广泛流传,约定俗成的命名方式
- 逐步求精的代码结构
约束
当前的环境下,靠用户(开发者)的自觉性已经不适用了;放任存在隐患,倒不如提前做好约束。
最小权限
只给开发者满足开发的最小权限。
一个手表,不会让你直接拨动表盘去调整时间。
于是一个类的成员,能 private 的就不需要 public;基类更是如此。约束调用方式,就是为了避免滥用。
最小权限,在协同工作中意义重大。很直观的,在服务器维护中,信任人品,也得防止误操作吧。
明确调用
举个例子,在 T1Activity 中通过 intent 传参数启动 T2Activity,常用的方式如下:
1 | Intent intent = new Intent(this, T2Activity.class); |
好,那现在需要在 T3Activity 中启动 T2Activity。对于 T2Activity 需要的参数,是全局搜代码并且阅读 T2Activity 呢;还是去询问原作者?而且手抖误删了一行 putExtra 呢?
无论是哪种方式,都是损失效率的。
实际上,大可以在 T2Activity 中明确启动方式。
Objective-C
常用的命名方式是这样的
1 | - (id)initWithValue1:(NSString *)value1 value2:(NSString *)value2 |
Android 中可以在 T2Activity 中这么写这么一个静态函数
1 | public static void initWithValue1AndValue2(Context context, String value1, String value2) |
在任何界面需要启动 T2Activity 时,都可以调用 T2Activity.initWithValue1AndValue2
方法,这样,就把需要传递的参数约束好了。
嗯,对于各种网络请求的接口定义更是如此;以明确调用作为约束,方便自己,方便他人。
…………
有新的体会再做更新