API设计的一些核心原则

2020-02-22  本文已影响0人  时芥蓝

没有经过设计的代码,是没有灵魂的。


鲁迅没说过这句话

设计涵盖的内容很广,而API设计是与日常开发关系比较紧密的一块。换句话说,掌握了一些核心的设计要领,对代码质量提升是立竿见影的。

无规矩不成方圆,API设计一样。最近学习了Google工程师总结的API设计原则,看完后,脑海中回忆起自己写的代码,方法的命名、参数顺序、异常处置、功能范围,无一不被作者所戳中。我觉得很有价值,所以拿来与大家一起分享,相信对你肯定有帮助。当然,作者总结的比较简洁,具体含义,需要大家思考并深入的体会,相信经过一番思考以后,定有收获。

由于原文是生肉,为了给部分小伙伴提供一些便利,我进行了翻译,翻译不好的地方还请指正,在此表示感谢。当然有喜欢生肉的同学,我也会在文末评论处贴上原文地址,请自取。

以下是正文部分。


image

API设计原则

通用原则

api应该只做一件事,并且要做好

最小化内容访问权限

名字很重要 -api是一种小语言

if (car.speed() > 2 * SPEED_LIMIT){
    generateAlert("Watch out for cops!);
}

文档很重要

重用是一种说起来容易做起来难的事情。要做到这一点,需要良好的设计和非常好的文档。即使当我们看到良好的设计(这仍然是不常见的)时,如果没有良好的文档,我们也不会看到组件被重用。
- D. L. Parnas, _Software Aging.
Proceedings
of 16th International Conference Software
Engineering, 1994

虔诚的写文档

api设计决策要考虑性能影响

api设计决策对性能的影响是真实并且持久的

api必须与平台和平共存

类设计

减少可变性

Bad: Date, Calendar
Good: TimerTask

子类只出现在有意义的地方

Bad: Properties extends Hashtable, Stack extends Vector
Good: Set extends Collection

设计和文档用于继承,否则就禁止它

Bad: Many concrete classes in J2SE libraries
Good: AbstractSet, AbstractMap

方法设计

不要让使用者做任何模块可以做的事情

image.pngimage.png

不要违反最小化原则

public class Thread implements Runnable {
    // Tests whether current thread has been interrupted.
    // Clears the interrupted status of current thread.
    public static boolean interrupted();
    }
}

快速失败-当发生错误时,尽可能早的报错

使用适当的参数和返回类型

使用一致的参数排序

image.pngimage.png
image.pngimage.png

避免长的参数列表

避免需要异常处理的返回值

Bad:


image.pngimage.png

异常设计

支持unchecked异常

•checked-客户必须采取恢复措施
•unchecked–编程错误
•过度使用checked的异常会导致样板


image.pngimage.png

在异常中包含失败捕获信息

上一篇下一篇

猜你喜欢

热点阅读