如何设计好的接口(Google分享)

简介: 本文源自Google工程师joshua bloch的经验分享,楼主进行了整理和总结。

image.png

本文源自Google工程师joshua bloch的经验分享,楼主进行了整理和总结。

一、好接口的特性

(1)易学

(2)易用,甚至不需要文档

(3)难于误用

(4)容易阅读与维护

(5)容易扩展

二、接口设计实现的过程

(1)分析需求

考虑是否有更佳解决方案?

这是否使我们这真想要的需求?

(2)设计小接口

这个阶段,快速敏捷迭代

小接口易于修改

小接口的实现给人自信,减少挫败感

(3)高频、提早撰写接口

实现自测用例

(4)撰写服务提供接口(SPI:service provider interface)尤为重要

如果提供一个接口,是否就不支持第二个?

如果提供两个接口,是否能够扩展,融合?

如果提供三个接口,是否足够?能否工作正常?

(5)注意“正常的”异常维护

你的接口是为了满足所有需求?

即使有异常,也不要紧

三、接口设计的基本原则

(1)只做并做好一件事

函数名自解释;

不恰当的函数名,往往是不恰当设计的征兆

(2)如果没做到(1),就将函数分解

只增加,永远不要删除函数与接口

你永远不知道这个接口被谁在使用

(3)实现永远不能影响接口

举例:不能假定函数调用者只能使用hash

不能对外暴露实现细节

(4)最小化访问

尽量使用私有化成员

注意信息隐藏

(5)文档与注释

接口不是只写给自己(即使只给自己,也应该有说明)

(6)提高性能

(7)平台无关

四、类设计

(1)最小易变性

举例:Date不宜设计成类,过于易变;可设计为TimerTask

如果可变,则要设计良好、最小化的状态子集合

(2)尽量少用继承

如果设计一个类不能被继承,则应该明确禁止

五、方法设计

(1)不要到处拷贝模板代码

模块能做的事,不用到处拷贝方法

(2)原子性应该在一个方法内保证

(3)Fail-Fast设计原则

出错尽量早点返回,交给上层处理,不要勉强抢救

(4)避免数据直接访问,而是提供访问方法

(5)谨慎重载

小心多重继承中的误重载

可以重载的情况,也慎重考虑是否应该重载

(6)注意参数与返回值类型

尽量明确类型

能不用string尽量不用

使用float的地方尽量用double,64bit

(7)不改变的参数使用const

(8)参数个数不宜太多

如果过多,就要考虑接口的合理性了

(9)避免返回值与异常的同时返回

目录
相关文章
|
JSON 定位技术 API
谷歌地图接口Google Maps APIs中地图样式设计配置调整与JSON或URL导出
谷歌地图接口Google Maps APIs中地图样式设计配置调整与JSON或URL导出
394 1
|
关系型数据库 MySQL API
Go语言微服务框架 - 6.用Google风格的API接口打通MySQL操作
随着RPC与MySQL的打通,整个框架已经开始打通了数据的出入口。 接下来,我们就尝试着实现通过RPC请求操作MySQL数据库,打通整个链路,真正地让这个平台实现可用。
161 0
|
Web App开发 PHP
Google翻译接口应用
最近做一翻译公司网站,要求加一在线翻译。之前他们要的是一个外链接,我在想要是有现成的翻译网站接口可以调用的话,这个链接也就没必要了。在网上查了下,google的在线翻译可以用,找到了相关的代码,我自己添加了一些,测试可以用。
2010 0
|
Web App开发 JavaScript 前端开发
Google 地图基本接口(一)
前不久研究了一下51的地图接口,感觉还不错。但是在我们的醒目中想到电子地图,首先想到的是Google吧,Google地球应该说没有那个搞程序的没有听说过,Google的技术令我们称叹。最近忙公司的事也好久没有研究其他的东西了,今天起决定开始研究Google 地图接口。
2144 0
|
数据可视化 定位技术 Sentinel
如何用Google Earth Engine快速、大量下载遥感影像数据?
【2月更文挑战第9天】本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围、空间范围的遥感影像数据(包括Landsat、Sentinel等)的方法~
5069 1
如何用Google Earth Engine快速、大量下载遥感影像数据?
|
编解码 人工智能 算法
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
Google Earth Engine——促进森林温室气体报告的全球时间序列数据集
296 0
|
编解码 人工智能 数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
379 0
|
编解码
Open Google Earth Engine(OEEL)——matrixUnit(...)中产生常量影像
Open Google Earth Engine(OEEL)——matrixUnit(...)中产生常量影像
236 0
Google Earth Engine(GEE)——导出指定区域的河流和流域范围
Google Earth Engine(GEE)——导出指定区域的河流和流域范围
819 0

推荐镜像

更多