当前位置: 首页 > news >正文

嵌入式开发:清理可重用软件的API

  嵌入式开发人员编写可重用的固件需要创建干净的应用程序接口(API)。该API需要经过深思熟虑,以便使重用变得容易和高效。理想情况下,API应该至少具备这六个特征。

  特征1——显而易见,易于理解

  就像任何一个软件可以从一个应用程序重用到下一个应用程序一样,API应该简单、明显、易于理解。并且要记住!当API不一致并且使用看似随机的语法时,使用现有的组件或库会非常烦人。你不希望用户为了找到正确的调用或操作而不断地查看文档。

  特征2——可扩展

  技术以惊人的速度变化,有时这些变化需要对API进行添加或修改。因此,API应该以这样一种方式开发,即它可以很容易地扩展以包含新的特性,而不必从头重写API或进行彻底的检查。API在保持与以前版本一致性的同时添加新功能的能力是决定其长期生存能力的一个关键因素。

  特征3——具有高内聚力

  内聚性是指一个模块的元素,或者在这种情况下是API,属于一起的程度。低内聚力的一个例子是将微控制器的所有外设功能集中到一个接口中。界面将会很大且难以操作。相反,微控制器外设功能可以分解成单独的模块,每个模块都有特定于单个外设的API函数,以增加凝聚力。

  

 

  特征4——利用抽象数据类型

  在嵌入式开发中,一个好的API将在不止一个系统、平台和MCU上使用。系统之间的实现细节可能需要略有不同,但是接口需要保持一致。抽象数据类型的使用有助于将数据的使用与实现细节分开,并有助于使接口更具可移植性。

  特征5——使用封装和数据隐藏

  一个好的API应该遵循面向对象软件的最佳实践,即使该软件是用c语言编写的不放眼全球。相反,通过get和set helper函数执行对关键数据的访问。API还应该尽可能少地暴露给外部世界,也就是说,只暴露API用户需要知道的东西。本质上,API应该以黑盒的方式提供它的功能。用户不需要知道API的实现细节,只需要知道使用接口的前置和后置条件。

  特征6——遵循“少即是多”的原则

  最好的API能够通过几个简单的接口提供关键的系统功能。开发人员有时会受到诱惑,通过API暴露外设、芯片或应用程序库的每一个可能的功能。相反,他们应该仔细考虑API,尽量减少它暴露的特性。许多复杂而笨拙的API可以被重构为更简单的界面,用户会发现更易于管理。

  在嵌入式开发中,API对于可重用软件的开发至关重要,API的正确设计可以确保它在未来几年都有用。一个好的API还应该具备哪些特征?

相关文章:

  • Windows与网络基础-3-虚拟机安装Kali Linux
  • 面试题-谈谈你对JVM的理解
  • 面试时Dubbo原理记不住?来看看《Dubbo原理浅析——从RPC本质看Dubbo》
  • 开源治理:安全的关键
  • 什么是快应用?与原生APP相比优势在哪里
  • 卷积神经网络结构有哪些,卷积神经网络结构特点
  • 阿里内部首发面试终极指南V3.0,相对一线大厂面试知识点+面试题
  • vue路由原理
  • idea常用快捷键和插件
  • 04_feign介绍(OpenFeign)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • 长安链源码学习v2.2.1--ioc机制(九)
  • 面试必备:《Java 最常见 200+ 面试题全解析》
  • 抖音短视频运营规划内容孵化计划书模板
  • Leetcode 946.验证栈序列
  • 2017年终总结、随想
  • canvas绘制圆角头像
  • django开发-定时任务的使用
  • Iterator 和 for...of 循环
  • js对象的深浅拷贝
  • js中的正则表达式入门
  • mysql中InnoDB引擎中页的概念
  • python_bomb----数据类型总结
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 今年的LC3大会没了?
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 微信小程序实战练习(仿五洲到家微信版)
  • 学习ES6 变量的解构赋值
  • 用Python写一份独特的元宵节祝福
  • 06-01 点餐小程序前台界面搭建
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • #FPGA(基础知识)
  • $(selector).each()和$.each()的区别
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (十五)使用Nexus创建Maven私服
  • (四)JPA - JQPL 实现增删改查
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)基于IDEA的JAVA基础10
  • (译)计算距离、方位和更多经纬度之间的点
  • *1 计算机基础和操作系统基础及几大协议
  • .gitignore
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET的微型Web框架 Nancy
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net中wcf服务生成及调用
  • .Net中间语言BeforeFieldInit
  • @Autowired标签与 @Resource标签 的区别
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @ModelAttribute使用详解
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心