你写过的所有代码都逃不过这两方面:API 和抽象
你写过的所有代码都逃不过这两方面:API 和抽象
作为前端,你可能开发过 Electron 桌面应用、小程序、浏览器上的 web 应用、基于 React Native 等跨端引擎的 app,基于 Node.js 的工具或者服务等各种应用,这些都是 JS 的不同的 runtime,开发也都是基于前端那套技术。
面对这么多的细分领域,作为前端工程师的你是否曾迷茫过:这么多技术我该学什么?他们中有没有什么本质的东西呢?
其实所有的这些技术,你写过的所有代码,都可以分为两个方面: api 和 抽象。
api
不同平台提供的 api 不同,支持的能力不同:
浏览器提供了 dom api、支持了 css 的渲染,还提供了音视频、webgl 等相关 api,这些 api 是我们开发前端应用的基础。
Node.js 提供了操作系统能力的 api,比如进程、线程、网络、文件等,这些 api 是我们开发工具链或后端应用的基础。
React Native 等跨端引擎支持了 css 的渲染,还提供了设备能力的 api,比如照相机、闪光灯、传感器、GPS 等 api,这是我们开发移动 app 的基础。
Electron 集成了 Chromium 和 Node.js,同时还提供了桌面相关的 api。
小程序支持了 css 的渲染之外,还提供了一些宿主 app 能力的 api。
此外,还有很多的 runtime,比如 vscode 插件、sketch 插件等,都有各自能够使用的 api。
不同的 JS runtime 提供了不同 api 给上层应用,这是应用开发的基础,也是应用开发的能力边界。
抽象
基于 runtime 提供的 api 我们就能完成应用的功能开发,但是复杂场景下往往会做一些抽象。
比如浏览器上的前端应用主要是把数据通过 dom api 和 css 渲染出来,并做一些交互,那么我们就抽象出了数据驱动的前端框架,抽象出了组件、状态、数据流等概念。之后就可以把不同的需求抽象为不同的组件、状态。
经过层层抽象之后,开发复杂前端应用的时候代码更容易维护、成本更低。
比如基于 Node.js 的 fs、net、http 等 api 我们就能实现 web server,但是对于复杂的企业级应用,我们通过后端框架做 MVC 的抽象,抽象出控制器、服务、模型、视图等概念。之后的后端代码就可以把需求抽象为不同的控制器和服务。
经过 MVC 的抽象之后,后端应用的分层更清晰、更容易维护和扩展。
复杂的应用需要在 api 的基础上做一些抽象。我们往往会用框架做一层抽象,然后自己再做一层抽象,经过层层抽象之后的代码是更容易维护和扩展的。这也就是所谓的架构。
如何深入 api 和抽象
api
api 是对操作系统能力或不同领域能力的封装。
比如 Node.js 的进程、线程、文件、网络的 api 是对操作系统能力的封装,想深入它们就要去学习操作系统的一些原理。
而 webgl、音视频等 api 则分别是对图形学、音视频等领域的能力的封装,想要深入它们就要去学习这些领域的一些原理。
个人觉得我们知道 api 提供了什么能力就行,没必要过度深入 api 的实现原理。
抽象
抽象是基于编程语言的编程范式,针对不同目标做的设计。
Javascript 提供了面向对象、函数式等编程范式,那么就可以基于对象来做抽象,使用面向对象的各种设计模式,或者基于函数式那一套。这是抽象的基础。
抽象是根据不同的目标来做的。
前端领域主要是要分离 dom 操作和数据,把页面按照功能做划分,所以根据这些目标就做了 mvvm 和组件化的抽象。
后端领域主要是要做分层、解耦等,于是就做了 IOC、MVC 等抽象。
可以看到,抽象是基于编程语言的范式,根据需求做的设计,好的框架一定是做了满足某种管理代码的需求的抽象。
想要提升抽象、架构设计能力的话,可以学习下面向对象的设计模式,或者函数式等编程范式。研究各种框架是如何做的抽象。
总结
不同平台提供了不同的 api,这是应用开发的基础和边界。复杂应用往往要在 api 基础上做层层抽象,一般会用框架做一层抽象,自己再做一层抽象,目标是为了代码划分更清晰,提升可维护性和可扩展性。
其实我们写过的所有代码,都可以分为 api 和抽象这两方面。
深入 API 原理的话要深入操作系统和各领域的知识。提升抽象能力的话,可以学习面向对象的设计模式或者函数式等编程范式。
不管你现在做哪个平台之上的应用开发,刚开始都是要先学习 api 的,之后就是要理解各种抽象了:框架是怎么抽象的,上层又做了什么抽象。
API 保证下限,抽象可以提高上限。而且抽象能力或者说架构能力是可以迁移的,是程序员最重要的能力之一。
相关文章
- 使用 Promethues 实现应用监控的一些实践
- 深度操作系统 deepin 20.5 发布!新增人脸识别,应用商店支持触屏,全局搜索优化(附更新内容大全)
- 复制文字会自动推荐应用?Windows 11智能剪贴板曝光
- 微软 Windows 11 Beta Release 预览版 Build 22000.588 发布,进行大量修复
- OpenHarmony系统是怎么知道应用是Ark应用的
- Openharmony - 3516应用调用到驱动尝试
- Windows 11自带播放器其实超好用!教你几招玩转它
- 微软 Windows 11 Dev 22572 更新:原生应用升级、Microsoft Defender 预览版上线
- OpenHarmony应用开发—配置OpenHarmony应用签名信息
- 了解一些ArkUI概念并熟悉应用的结构
- 只需两步,就可以在Windows 11操作系统上运行Android程序,非常简单
- 微软正在重新设计Windows 11的文档默认打开方式窗口
- 微软Windows 11 安卓子系统运行谷歌 Play Store 上手体验:运行 Google Docs、YouTube 等应用
- 基于HarmonyOS低代码开发的学习与应用
- OpenHarmony预置系统应用编译安装全流程记录
- Windows 11运行安卓App必须满足五个PC配置:最低8GB内存 没SSD告辞
- 微软公布运行Android应用/游戏的Windows 11设备要求
- Windows 11承诺的支持安卓App终于更新了 大神教你如何在国区使用
- 重新设计的Windows记事本和Media Player上架
- 移植案例与原理 - XTS子系统之应用兼容性测试套件之二