`
ryanflyer
  • 浏览: 101034 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【译】如何设计一个好的API

 
阅读更多

好的API,应该是易于学习、易于使用即使没有文档、很难被误用、易于阅读并且使用它的代码容易维护、足够强大来满足需求、易于扩展。

 

API设计流程

 

收集需求-》一个简单的设计说明-》尽早和经常写API-》写服务提供接口比较重要-》维护现实需求

1.一般原则

 

  • API应该只做一件事,并且把它做好

功能应该很容易解释,如果很难命名,一般都是一个坏的信号。一个好的名字驱动开发。容易切分和合并模块。

 

 

  • API应该设计的尽可能的小,但是也不要太过于小
API应该满足它的需求
  • 实现不应该影响API
  • 保持最小的可访问性
使类和成员变量尽可能的私有化。公共类不应该有公共字段。最大化信息隐藏。允许模块被独立的使用、理解、构建、测试及调试。
  • 命名问题-API是一门小语言
名字应该尽可能的自解释。保持连续性-同一个单词保持同一个含义。尽可能的保持对称。代码应该读起来像散文。
  • 虔诚的书写文档

对每一个类、接口、方法、构造方法、参数和异常书写注释文档。

 

  • 考虑API设计的性能
坏的设计会时性能变差。以下几种都是不好的实践:使类型容易变化、提供构造方法而不是静态工厂、使用实现而不是接口。Do not warp API to gain performance(不太理解这句话)
  • API必须在任何平台都可用,保持同样的行为功能。
2.类设计
  • 最小化可变性
好的设计范例:TimerTask;坏的设计范例:Date Calendar;
  • 为继承进行设计并且书写文档,否则禁止继承
继承违反了封装。保守策略:所有的具体类都定义为final的。
坏的设计范例:J2SE库中很多具体的类;好的设计范例:AbstractSet,AbstractMap
3.方法设计
  • 使用合适的参数和返回类型
对于输入,参数优先使用接口而不是类(提供灵活性和性能的好处);
使用尽可能具体的输入参数类型,为的是尽早发现错误。(从运行时转移到编译时);
如果存在更好的类型,就不要使用String。String笨重、易于出错、缓慢。
不要使用浮点类型在货币值上,因为会导致不精确的结果。
使用double(64bits),不适用float(32bits)。可以提高精度。
  • 在方法中使用一致的参数顺序
java.util.Collections-第一个参数经常是被修改或者查询的collection。
java.util.concurrent-时间一般会被定义为 long delay,TimeUnit unit。
  • 避免长参数列表
理想情况是三个或者更少。相同类型的长参数列表是有害的,编程人员容易错误的传递参数。有两种技术可以减少参数列表长度:分解方法,创建辅助类来保存方法。
  • 返回零长度的数组或者空集合类,而不是null
4.异常设计
  • 抛出异常表明异常发生的条件
不要强迫客户端使用异常来控制条件流向,不要安静的失败。
  • 非受检异常优先
受检异常-客户端必须采取恢复动作,非受检异常-程序错误。
  • 异常中包含错误捕获信息。
5.重构API设计
 
分享到:
评论

相关推荐

    设计 [(美)布洛克著](共两部分)

    依托ASP.NET Web API阐述API设计与开发的通用技术,是一本全面介绍如何构建真实可演化API的实践指南。本书共分三部分。第一部分介绍Web/HTTP和API开发的基础知识,介绍ASP.NET Web API,为初学者以及想充分利用HTTP...

    .NET设计规范:约定、惯用法与模式(第2版)克瓦林纳 5/5

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...

    .NET设计规范:约定、惯用法与模式(第2版)1/5

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...

    软件框架设计的艺术.pdf Practical API Design confessions of a Java Framework Architect

    软件框架设计的艺术 捷克 jaroslav lulach著,王磊,朱兴译

    .NET设计规范约定 惯用法与模式

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软...

    .NET设计规范:约定、惯用法与模式(第2版)克瓦林纳 3/5

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...

    .NET设计规范:约定、惯用法与模式(第2版)克瓦林纳 4/5

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...

    .NET设计规范:约定、惯用法与模式(第2版)克瓦林纳 2/5

    他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。 :Krzysztof Cwalina 微软公司...

    【文献综述】基于JAVA的俄罗斯方块游戏设计与实现.pdf

    面向对象设计另外一个目标就是能产生很多的有关联的类,可以让软件的再开发变得简 单。举例来说,很多软件工程都有同样的功能,尤其是很多应用了同一原理组织的软件工 程。软件的二次开发者想自己为软件开发插件以...

    Win32 多线程程序设计(候捷译)part2

    通过Win32 API,Windows NT以及Windows 95都可以支持多线程程序设计,但是这个重要主题的信息却极稀有而不够详尽。 在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、...

    Win32 多线程程序设计(候捷译)part1

    通过Win32 API,Windows NT以及Windows 95都可以支持多线程程序设计,但是这个重要主题的信息却极稀有而不够详尽。 在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、...

    数据库课程设计1.pdf

    而 Visual Basic 则是应用面向对象的程序 设计方法(OOP),把程序和数据封装起来作为一个对象,并为每个对象赋予应有 的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象 的程序代码,而是用...

    Freemarker使用手册、api、中文版教程

     Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍)  XML Processing Guide(对XML数据模型处理的介绍)  Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 ...

    VB 网络聊天系统的设计与实现

    总之,此次论文的写作过程,我收获了很多,即为大学三年划上了一个完美的句号,也为将来的人生之路做好了一个很好的铺垫。 参考文献 参考资料: 《Visual Basic程序设计教程》 何瑞麟 科学出版社 《Visual Basic与...

    计算机科学系毕业设计论文范文

    本课题设计的目标是实现一个基于Struts2框架的电子商城网站。论文先介绍了开发项目所用到的关键技术,接着从用户需求、经济和技术等三个方面对系统进行分析。在概要设计中,根据系统分析的结果,把系统分为前台和...

    ZooKeeper:分布式过程协同技术详解 [美] Flavio Junqueira,Benjamin Reed 著,谢超 译

    第一部分(第1~2章)阐述ApacheZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。第1章介绍ZooKeeper可以做什么,以及其设计如何支撑这些任务。第2章介绍基本概念和基本组成模块,并通过...

    Hadoop实战(陆嘉恒)译

    map侧过滤后在reduce侧联结5.3 创建一个Bloom filter5.3.1 Bloom filter做了什么5.3.2 实现一个Bloom filter5.3.3 Hadoop 0.20 以上版本的Bloom filter5.4 温故知新5.5 小结5.6 更多资源第6 章 编程实践6.1 开发...

    基于JAVA的学生通讯录管理系统设计和实现[文献综述].doc

    Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用 程序提供一个健壮且灵活的环境,它包括灵活的用户界面、健壮的安全模型、许多内置 的网络协议以及对可以动态下载的连网和离线...

Global site tag (gtag.js) - Google Analytics