Serverless 是一种云计算模式,它将应用程序中的基础设施部分托管给云服务提供商,使开发人员能够专注于业务逻辑而不必担心服务器运维。在 Serverless 中,函数是应用程序的基本单位。每个函数都是一段独立的代码,都可以独立部署和运行。但是在实际开发中,我们经常会遇到许多函数具有相似的逻辑,这就会导致重复的代码。
如何防止 Serverless 中的重复代码呢?在本文中,我们将介绍一些技巧来解决这个问题。
抽象公共逻辑
第一种方法是抽象公共逻辑。在 Serverless 中,我们可以将相似的逻辑抽象出来成为一个通用的函数。这个函数可以被多个函数引用,而不用在每个函数中都写一遍相似的逻辑。快递轨迹查询可以看作是一个很好的例子。
假设我们有两个函数,分别是查快递轨迹和查快递运费,它们都需要访问快递数据 API,而该 API 需要身份验证。我们可以将身份验证和数据 API 访问封装在一起,并将其作为一个单独的函数。
以 Node.js 为例,示例代码如下:
-- -------------------- ---- ------- ----- ------- - ------------------- -------- ------------------------- --------- - -- ------ ------------------------------------------- ------------- ---- ----- - -- ----- - -------------- - ---- - -- -------- ------------------------------------------------------- ------------- ---- ----- - -- ----- - -------------- - ---- - -------------- ------ - --- - --- - -------- ------------------------ --------- - -- ------ ------------------------------------------- ------------- ---- ----- - -- ----- - -------------- - ---- - -- -------- ------------------------------------------------------ ------------- ---- ----- - -- ----- - -------------- - ---- - -------------- ------ - --- - --- -
如上述代码所示,我们把公共逻辑封装在了 getExpressInfo()
中,然后在 getExpressFee()
中调用 getExpressInfo()
,以获取身份验证和访问快递数据 API 的逻辑。
这样,我们就能在多个函数中共享代码,并且可以大大减少冗余。
封装通用库
第二种方法是封装通用库。在 Serverless 中,使用通用库是一种很好的方式来避免重复代码。通用库通常由一个或多个函数使用,它是一组可重用的代码。通用库通常是由第三方或内部开发人员维护,提供商自己也可以为 Serverless 代码提供一些封装好的库。
以 JavaScript 为例,我们可以使用 NPM 包来引入通用库。这些库是应用最广泛和最经典的 HTTP 提供器之一,提供了大量的功能和便利。我们可以在函数代码中使用它们,而不必担心代码的重复。
例如,Express 是一个轻量级的 Web 框架,它可以帮助我们进行路由、模板和中间件等方面的处理。我们可以在每个函数中单独部署 Express 库,但是这样会导致我们在多个函数中编写相同的代码。
因此,我们可以将 Express 库封装成一个通用库,然后在函数中使用该库。以下是示例代码:
const express = require('express'); const app = express(); app.get('/hello', function(req, res) { res.send('Hello World!'); }); exports.handler = app;
如上述代码所示,我们只需要在服务器上部署了一个函数,就可以访问路由 /hello
,而路由 /hello
的处理函数是在框架中定义的。
模板化
第三种方法是使用模板来创建和管理函数。在 Serverless 中,函数代码很可能是相似的,只是输入和输出有所不同。例如,我们可能需要访问多个数据源,然后返回一个组合结果。这个组合的代码可能在几个函数中都需要用到。用一个通用函数处理它们是浪费时间的,因为这个通用函数有很多不同的输入和输出,需要定制化。
一个有效的解决方法是使用模板。我们可以使用模板来生成每个函数的代码,这样就可以避免重复的代码。模板通常包括通用逻辑、数据对象和响应对象。因此,我们可以使用模板来生成通用代码,然后将模板应用于不同的函数中。
以下是使用模板生成 Express.js 路由的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- -- ------ -------- ---------------- ---- - -- -------- - -- ----------- -------- ------------------------ - ------ ------------- ---- - -- ------ ---------------- ----- -- ------ ----- ------ - ----------------- ----- ------ - ------------ -- ------ ----- ------ - ------------------- -------- -- ---- ----------------- -- - -- ---- ------------------ --------------------------- ------------ ------------------ --------------------------- ------------ --------------- - ----
如上述代码所示,我们使用 createRouteHandler()
函数生成路由处理程序。createRouteHandler()
函数将 commonLogic()
函数和特定的输入参数组合在一起。
这样,我们就能将路由处理程序封装成一个通用模板,以解决代码重复的问题。
结论
在 Serverless 中,防止代码重复是非常重要的。通过抽象公共逻辑、封装通用库和模板化,我们可以避免重复的代码,提高代码质量和可维护性。
这些技巧可以与多种编程语言和 Serverless 系统一起使用。无论是在 AWS Lambda 还是 Google Cloud Functions,我们都可以使用这些方法来减少重复代码的出现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670372d8d91dce0dc84b8705