设计API时要区分其目标用户群

提供给客户端代码的API与为开发商提供的API是不同的。

1.API升级

(1)抛出异常模式,不太好,用户升级一次每个api需要写好几行代码
(2)预留参数
设计时最好哪些不准备别人继承的类都用 final 修饰

2.合理分解API

一类供他人调用来完成某些功能(final类);一类供他人来扩展API的(预留参数)==>可读性和代码升级需要
面向对象的语言都有内聚性的倾向,查找资料时,可以方便看出。
(1)把有关联的方法放置在同一个类中
(2)对于一些无关的方法,决不能因为一时无法找到更合适的位置来放置,就随便放入与它们无关的地方
(3)把有关联的类放置在同一个包中
(4)把一些只有特殊场景下才用的到的类转移到其他地方
牢记: 使用API的人可能是多个不同的用户群
总结: 最好是把实现类分开放置在不同的包里,让用户很难找到这些类,也避免API用户有机会一下子拿到这么多的类
api和spi
如,具体实现放到它自己的模块里,然后通过独立的API进行版本控制
API: 用来供他人调用来完成某些功能的内容,API包中的类应该是自包含的,不会引入人很SPI包中的内容
SPI: 用来供他人来具体实现的内容

API分类

核心类型的API: 用户往往只关心类库提供了哪些功能,这个类库执行某些关键API
支持类型的API: 大量实用方法,让用户更容易使用,用户不一定用,只是为了让用户感到安慰,它们只是助手类,非必须内容
核心类型的SPI: 提供另一用户群使用接口,拓展类库功能。如果不允许外部提供拓展功能,则不需要提供这些内容
支持类型的SPI: 助手
这种方法很容易对API演进。

软件框架-无绪开发5相关推荐

  1. 软件框架-无绪开发4

    模块化架构 将单个应用拆分拆分成不同的模块可大大改善设计.20世纪60年代意大利面条代码. 模块化程序,是由不同模块构成,一个模块是一组类的集合,模块中有些类是public级别,外部模块可访问:有些是 ...

  2. node.js 桌面软件框架 electron 开发流程

    ##node.js 桌面软件框架 electron 开发流程 ####步骤 1,安装electron npm --g electron 2,创建工程 //新建app文件夹 mkdir app //创建 ...

  3. 软件框架技术1(MyBatis)

    目录 1.软件框架技术概述: 1.1为什么会出现软件框架技术? 1.2框架概述 1.3框架的优势 2.Maven 2.1.maven是什么 2.2maven依赖管理 2.3仓库 ​编辑2.4maven ...

  4. Rhapsody软件框架和UML的实时系统开发

    转自http://tech.it168.com/a2009/0827/669/000000669614.shtml 引言 面向对象的软件设计方法推崇抽象.可重用且易维护的设计模式.其中,一个普遍采用的 ...

  5. 《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架

    <多旋翼无人飞行器嵌入式飞控开发指南>里基于FreeRTOS的无人机软件框架

  6. 嵌入式底层开发的软件框架简述

    在底层代码编写中,初始的框架设计总会面临选择,针对实际的硬件使用环境,大家对于使用的软件框架有很多选择,今天我简单描述一些比较常用的架构,让大家能够理解并选择合适的架构.    1. 简单的顺序执行程 ...

  7. 高通开发系列 - Voice Call之语音通话软件框架介绍(翻译)

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  8. 软件框架设计的艺术----读书总结

    总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义. 理性主义认为理智是信息的首要来源.给出一个假设,只要通过思考就能理解和描述这个世界, ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(二)

    使用 CodeIgniter 框架快速开发 PHP 应用(二) 原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站 用CI建一个网站 ...

最新文章

  1. android 编写系统应用,Android应用快速开发系统设计与实现
  2. python手机版ios-使用Python写iOS自动化测试
  3. C#中容器控件GroupBox、Panel、TabControl
  4. 深度学习之卷积神经网络(4)LeNet-5实战
  5. 51CTO会员开通成功!开森!
  6. hdu5726-GCD-ST表+二分
  7. sersync2 安装,配置
  8. 利用python进行数据分析——使用groupby机制对pandas对象类的数据进行聚合与分组操作
  9. git clone错误
  10. 【java笔记】map集合
  11. JavaScript日期对象Date总结(附实例)
  12. 网卡在linux系统下的驱动怎么安装,RedHat Linux系统如何安装无线网卡驱动
  13. matlab矩阵指定行求和,在matlab中对矩阵元素求和的有效(最快)方法
  14. 互联网产品设计思路参考
  15. 如何一键重装电脑系统?在家里用电脑重装win10系统步骤
  16. r7525服务器电源管理系统,戴尔 R7525评估:EPYC内核密度让英特尔心碎
  17. C语言——文件操作(读取文件保存到结构体)
  18. Linux内核源码分析-scsi子系统-让磁盘转起来-sd_spinup_disk
  19. 用Excel获取数据——不仅仅只是打开表格
  20. 健身管理系统源码设计和实现

热门文章

  1. android和Mac共享文件,这可能是 Mac 共享文件最详细的教程了
  2. 抗疫先锋 | 青藤云安全,守护安全最后一公里防线
  3. mysql中phpmyadmin安装教程_怎么安装phpMyAdmin?
  4. Linux操作系统学习笔记(二十)网络通信之TCP协议
  5. JSP基础知识总结一
  6. National day present
  7. 一个C++的21点(BlackJack)游戏
  8. 无人驾驶车辆模型预测控制(一)
  9. 分享一下我用Python接单的个人经历
  10. PCB抄板过程中反推原理图的方法