你写过的代码都逃不过这两方面:API和抽象

开发 前端
作为前端,你可能开发过 Electron 桌面应用、小程序、浏览器上的 web 应用、基于 React Native 等跨端引擎的 app,基于 Node.js 的工具或者服务等各种应用,这些都是 JS 的不同的 runtime,开发也都是基于前端那套技术。

[[435845]]

作为前端,你可能开发过 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 保证下限,抽象可以提高上限。而且抽象能力或者说架构能力是可以迁移的,是程序员最重要的能力之一。

 

责任编辑:武晓燕 来源: 神光的编程秘籍
相关推荐

2009-11-05 15:18:19

WCF扩展

2019-03-21 11:03:47

HDFSMapReduceHadoop

2009-11-06 09:57:32

2010-04-20 14:55:41

负载均衡

2010-04-26 15:37:18

DNS负载均衡

2009-10-27 13:45:32

VB.NET C#区别

2021-01-04 11:13:01

人脸识别

2009-10-10 13:46:44

服务器测试方法

2014-01-22 09:28:19

IDC

2009-10-09 17:30:11

服务器测试方法

2011-11-21 10:37:51

虚拟化微软虚拟化Hyper-V

2013-09-18 16:24:26

2018-04-15 15:47:18

2022-02-22 09:49:57

B 端设计趋势视觉风格

2020-03-26 14:51:16

工信部移动互联网手机

2021-08-31 10:45:28

故障内存问题排查

2010-06-13 17:16:12

IPv6协议

2010-03-17 15:45:13

无线设备兼容性

2011-12-22 15:33:05

Web

2021-10-27 09:20:56

Bug代码语言
点赞
收藏

51CTO技术栈公众号