Serverless 中防止重复代码的技巧

Serverless 是一种云计算模式,它将应用程序中的基础设施部分托管给云服务提供商,使开发人员能够专注于业务逻辑而不必担心服务器运维。在 Serverless 中,函数是应用程序的基本单位。每个函数都是一段独立的代码,都可以独立部署和运行。但是在实际开发中,我们经常会遇到许多函数具有相似的逻辑,这就会导致重复的代码。

如何防止 Serverless 中的重复代码呢?在本文中,我们将介绍一些技巧来解决这个问题。

抽象公共逻辑

第一种方法是抽象公共逻辑。在 Serverless 中,我们可以将相似的逻辑抽象出来成为一个通用的函数。这个函数可以被多个函数引用,而不用在每个函数中都写一遍相似的逻辑。快递轨迹查询可以看作是一个很好的例子。

假设我们有两个函数,分别是查快递轨迹和查快递运费,它们都需要访问快递数据 API,而该 API 需要身份验证。我们可以将身份验证和数据 API 访问封装在一起,并将其作为一个单独的函数。

以 Node.js 为例,示例代码如下:

----- ------- - -------------------

-------- ------------------------- --------- -
  -- ------
  ------------------------------------------- ------------- ---- ----- -
    -- ----- -
      --------------
    - ---- -
      -- --------
      ------------------------------------------------------- ------------- ---- ----- -
        -- ----- -
          --------------
        - ---- -
          -------------- ------
        -
      ---
    -
  ---
-

-------- ------------------------ --------- -
  -- ------
  ------------------------------------------- ------------- ---- ----- -
    -- ----- -
      --------------
    - ---- -
      -- --------
      ------------------------------------------------------ ------------- ---- ----- -
        -- ----- -
          --------------
        - ---- -
          -------------- ------
        -
      ---
    -
  ---
-

如上述代码所示,我们把公共逻辑封装在了 getExpressInfo() 中,然后在 getExpressFee() 中调用 getExpressInfo(),以获取身份验证和访问快递数据 API 的逻辑。

这样,我们就能在多个函数中共享代码,并且可以大大减少冗余。

封装通用库

第二种方法是封装通用库。在 Serverless 中,使用通用库是一种很好的方式来避免重复代码。通用库通常由一个或多个函数使用,它是一组可重用的代码。通用库通常是由第三方或内部开发人员维护,提供商自己也可以为 Serverless 代码提供一些封装好的库。

以 JavaScript 为例,我们可以使用 NPM 包来引入通用库。这些库是应用最广泛和最经典的 HTTP 提供器之一,提供了大量的功能和便利。我们可以在函数代码中使用它们,而不必担心代码的重复。

例如,Express 是一个轻量级的 Web 框架,它可以帮助我们进行路由、模板和中间件等方面的处理。我们可以在每个函数中单独部署 Express 库,但是这样会导致我们在多个函数中编写相同的代码。

因此,我们可以将 Express 库封装成一个通用库,然后在函数中使用该库。以下是示例代码:

----- ------- - -------------------
----- --- - ----------

----------------- ------------- ---- -
  --------------- ---------
---

--------------- - ----

如上述代码所示,我们只需要在服务器上部署了一个函数,就可以访问路由 /hello,而路由 /hello 的处理函数是在框架中定义的。

模板化

第三种方法是使用模板来创建和管理函数。在 Serverless 中,函数代码很可能是相似的,只是输入和输出有所不同。例如,我们可能需要访问多个数据源,然后返回一个组合结果。这个组合的代码可能在几个函数中都需要用到。用一个通用函数处理它们是浪费时间的,因为这个通用函数有很多不同的输入和输出,需要定制化。

一个有效的解决方法是使用模板。我们可以使用模板来生成每个函数的代码,这样就可以避免重复的代码。模板通常包括通用逻辑、数据对象和响应对象。因此,我们可以使用模板来生成通用代码,然后将模板应用于不同的函数中。

以下是使用模板生成 Express.js 路由的示例代码:

----- ------- - -------------------
----- --- - ----------

-- ------
-------- ---------------- ---- -
  -- --------
-

-- -----------
-------- ------------------------ -
  ------ ------------- ---- -
    -- ------
    ---------------- -----
    -- ------
    ----- ------ - -----------------
    ----- ------ - ------------
    -- ------
    ----- ------ - ------------------- --------
    -- ----
    -----------------
  --
-

-- ----
------------------ --------------------------- ------------
------------------ --------------------------- ------------

--------------- - ----

如上述代码所示,我们使用 createRouteHandler() 函数生成路由处理程序。createRouteHandler() 函数将 commonLogic() 函数和特定的输入参数组合在一起。

这样,我们就能将路由处理程序封装成一个通用模板,以解决代码重复的问题。

结论

在 Serverless 中,防止代码重复是非常重要的。通过抽象公共逻辑、封装通用库和模板化,我们可以避免重复的代码,提高代码质量和可维护性。

这些技巧可以与多种编程语言和 Serverless 系统一起使用。无论是在 AWS Lambda 还是 Google Cloud Functions,我们都可以使用这些方法来减少重复代码的出现。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670372d8d91dce0dc84b8705