在前后端分离的开发模式下,RESTful API 成为了前端开发中不可或缺的一部分。而在 RESTful API 的开发中,Controller 层作为连接前后端的一个重要组件,承担了重要的角色。然而,很多开发人员在使用 Controller 层的时候,往往会包涵与业务逻辑相关的代码,不仅增加了代码的维护难度,还可能会导致代码的不可复用等问题。因此,本文将介绍为什么 RESTful API 的 Controller 层不应该包涵业务逻辑,并给出具体的解决方式。
为什么 Controller 层不应该包含业务逻辑?
非职责分离,导致代码不可复用 在 MVC 模式下,Model 层负责数据存储以及业务逻辑的处理,而 Controller 层仅负责接收前端请求,调用 Model 层,然后返回结果给前端。如果 Controller 层直接包含业务逻辑的代码,将导致代码的职责分离不明确,而且一旦需要修改业务逻辑,就需要同时修改 Controller 层和 Model 层,增加维护的难度。
不易于单元测试的实现 如果 Controller 层包含业务逻辑的代码,那么在进行单元测试的时候,就需要模拟前端请求的数据,再模拟业务逻辑的实现,而这就增加了测试的复杂度。
防止“神”模式的出现 在开发过程中,可能会出现“神”模式的现象,即一个人独自负责整个项目的所有部分。这种模式往往会导致代码的质量下降,而分离出业务逻辑后,可以由专门的人负责交互逻辑的实现,避免了这种现象的出现。
避免代码冗余 如果 Controller 层包含了业务逻辑的代码,那么当一个业务逻辑需要在多个地方调用时,就需要在多个 Controller 层中均重复实现一遍,这样就增加了代码的冗余。
解决方式
为了解决 Controller 层包含业务逻辑的问题,可以采用如下方法:
Controller 层只负责接收前端请求、调用其他类(如 Service 层)的业务逻辑处理,然后返回数据给前端。这种方式遵循了职责分离的原则,代码职责分明,易于维护。
抽象出 Service 层,业务逻辑的处理在 Service 层中实现。Controller 层只是调用 Service 层处理后的结果,再将结果返回给前端。这样实现而不是在 Controller 层直接实现避免了下层数据存储和调用等重复代码。
将通用的功能抽象出来,放到公共类库中,使得不同业务逻辑处理的代码可以复用。
下面给出一个示例代码,演示如何在 RESTful API 的开发中使用 Service 层的方式,避免 Controller 层包含业务逻辑的代码。
-- -------------------- ---- ------- --------------- ------------------------- ------ ----- -------------- - ---------- ------- ----------- ------------ ----------- ------ ---------- ------ - ------ ------------------------ - ------------ ------ -------------------- ------------------- ---- ----- - ----------------------------- ------ --- -------------------------------- - - -------- ------ ----- ----------- - ---------- ------- -------------- --------------- ------ ---------- ----------- - ------ ------------------------- - ------ ---- --------------- ----- - ---------- ---------- - -------------------------- -------------------------------- - ------- ---------- ------------------------ ----- - ---------- ---------- - --- ------------- -- - ---- ----- ---------- -- ------ ----------- - -
在上面的示例代码中,Controller 层除了接收请求和返回结果之外,没有任何业务逻辑的代码。而业务逻辑的实现则在 Service 层中实现,Controller 层仅仅是调用 Service 层提供的方法,而不是在 Controller 层直接实现业务逻辑。这种方式将职责分离的很明确,易于维护。
总结
RESTful API 的 Controller 层不应该包涵业务逻辑,应该遵循职责分离原则,将业务逻辑的处理放在专门的 Service 层中实现。这样既可以避免代码冗余,又可以提高代码的可读性和可维护性,也方便单元测试和代码复用。在设计 RESTful API 的时候,需要注意遵循面向对象的设计原则,以便于代码的复用、维护和扩展。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646de828968c7c53b0c87ad2