RESTful API 的 Controller 层不应该包涵业务逻辑

阅读时长 4 分钟读完

在前后端分离的开发模式下,RESTful API 成为了前端开发中不可或缺的一部分。而在 RESTful API 的开发中,Controller 层作为连接前后端的一个重要组件,承担了重要的角色。然而,很多开发人员在使用 Controller 层的时候,往往会包涵与业务逻辑相关的代码,不仅增加了代码的维护难度,还可能会导致代码的不可复用等问题。因此,本文将介绍为什么 RESTful API 的 Controller 层不应该包涵业务逻辑,并给出具体的解决方式。

为什么 Controller 层不应该包含业务逻辑?

  1. 非职责分离,导致代码不可复用 在 MVC 模式下,Model 层负责数据存储以及业务逻辑的处理,而 Controller 层仅负责接收前端请求,调用 Model 层,然后返回结果给前端。如果 Controller 层直接包含业务逻辑的代码,将导致代码的职责分离不明确,而且一旦需要修改业务逻辑,就需要同时修改 Controller 层和 Model 层,增加维护的难度。

  2. 不易于单元测试的实现 如果 Controller 层包含业务逻辑的代码,那么在进行单元测试的时候,就需要模拟前端请求的数据,再模拟业务逻辑的实现,而这就增加了测试的复杂度。

  3. 防止“神”模式的出现 在开发过程中,可能会出现“神”模式的现象,即一个人独自负责整个项目的所有部分。这种模式往往会导致代码的质量下降,而分离出业务逻辑后,可以由专门的人负责交互逻辑的实现,避免了这种现象的出现。

  4. 避免代码冗余 如果 Controller 层包含了业务逻辑的代码,那么当一个业务逻辑需要在多个地方调用时,就需要在多个 Controller 层中均重复实现一遍,这样就增加了代码的冗余。

解决方式

为了解决 Controller 层包含业务逻辑的问题,可以采用如下方法:

  1. Controller 层只负责接收前端请求、调用其他类(如 Service 层)的业务逻辑处理,然后返回数据给前端。这种方式遵循了职责分离的原则,代码职责分明,易于维护。

  2. 抽象出 Service 层,业务逻辑的处理在 Service 层中实现。Controller 层只是调用 Service 层处理后的结果,再将结果返回给前端。这样实现而不是在 Controller 层直接实现避免了下层数据存储和调用等重复代码。

  3. 将通用的功能抽象出来,放到公共类库中,使得不同业务逻辑处理的代码可以复用。

下面给出一个示例代码,演示如何在 RESTful API 的开发中使用 Service 层的方式,避免 Controller 层包含业务逻辑的代码。

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

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

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

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

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

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

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

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

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

在上面的示例代码中,Controller 层除了接收请求和返回结果之外,没有任何业务逻辑的代码。而业务逻辑的实现则在 Service 层中实现,Controller 层仅仅是调用 Service 层提供的方法,而不是在 Controller 层直接实现业务逻辑。这种方式将职责分离的很明确,易于维护。

总结

RESTful API 的 Controller 层不应该包涵业务逻辑,应该遵循职责分离原则,将业务逻辑的处理放在专门的 Service 层中实现。这样既可以避免代码冗余,又可以提高代码的可读性和可维护性,也方便单元测试和代码复用。在设计 RESTful API 的时候,需要注意遵循面向对象的设计原则,以便于代码的复用、维护和扩展。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646de828968c7c53b0c87ad2

纠错
反馈