融汇贯通,前后端分离实践引发的思考
2023-09-18 23:13:53
从一体化Web设计到前后端分离,这是一个时代的选择
前后端分离并不是什么新鲜事,处处可见前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。
或许这就需要回到问题本质,团队中部分人产生疑问:一体化好好的,为什么要前后端分离?这也不失为一个很有趣的问题。
对于一些团队而言,一体化Web设计已经能够完全满足项目的需求,这种模式也已十分熟悉,稳定性和可控性都有保障,更重要的是,由于交互以及数据等全部都放置在前台页面中,相比于前后端分离而言,安全性更高。
而前后端分离架构,则需要开发和产品对系统内交互、权限、数据等多个方面达成共识,难免会引发各种问题,此外,在这种模式下,一些传统的开发方法论可能并不适用。
以上只是部分原因,除此之外,不少开发人员对前后端分离的认识还停留在表面,未能真正理解其背后的逻辑,直接导致的问题就是项目从一体化Web设计到前后端分离后,绝大部分代码直接复用,这些项目几乎并没有发挥前后端分离架构的任何优势。
甚至有些开发人员为了追求“快”,直接把绝大部分的业务逻辑都放在了前端,真正可以抽象化公共化沉淀的部分却很少。但事实上,前后端分离架构并不是追求某种极致,而是一个分工更加明晰、高效的框架。
因此,对于部分尚未引入前后端分离架构的团队,上述可以作为思考参考;对于已在使用前后端分离架构的团队而言,真正的问题则出在以下几个方面。
理解差异,设计思维的转变和统一
从一体化Web设计思维到前后端分离设计思维转变的阵痛,这将是团队需要直面的主要问题。
由于一体化Web设计主要基于传统的开发方式和思维习惯,因此,项目的前端和后端开发角色往往不甚明确,交互、权限、数据等方面也可以根据需要灵活调整,开发效率较高。
而前后端分离架构的运用,对前端和后端开发人员的角色认知、开发流程和思维习惯都提出了新的要求。前端负责整个页面的交互逻辑、页面渲染、性能优化等,而后端专注于整个页面的数据存储和数据交互。
上述两类开发人员以往不同程度的相互参与过双方的工作内容,因此在正式开始前后端分离架构开发前,需要对两类开发人员进行充分的培训,统一开发流程、开发思维和开发习惯。
只有通过这种方式,才能彻底打通两类开发人员之间的隔阂,才能减少项目在开发过程中因职责不清引发的问题。
系统耦合,依赖性的解构与分离
由于前后端分离架构是全新的框架,因此,对于如何对项目模块进行划分,模块之间如何交互等问题,往往会引发一些冲突,导致系统耦合度较高。
举例来说,基于一体化Web设计所开发的页面,往往是前端和后端强耦合的,在这样的情况下,前端和后端团队难以完全独立开发,项目开发进度很难同步,整体开发效率很低。
而采用前后端分离架构,团队可以设计统一的API,前端团队可以完全独立的进行页面开发,而后端团队也能独立开发各自的模块,真正做到互不干扰,提高整体开发效率。
但事实上,真正能够完全做到模块解耦的项目却非常少,很多项目只是将交互放在前端,本质上依然维持着前端与后端之间的强耦合,这样的架构除了会影响前端和后端的开发效率,还会影响页面的渲染速度。
因此,团队在选择前后端分离架构时,需要投入大量的时间和精力,对项目进行充分的分析,制定详细的模块划分策略,而每一部分也需要有明确的负责人,责任到人,从而保证项目开发的顺利进行。
持续优化,架构适应性的提升
随着时间的推移,项目功能需求会不断增加,前端和后端的API必然会不断优化,这势必也会影响前端和后端代码的变动,而且前后端代码变动的频率可能会完全不一样,长此以往,项目就很容易出现管理混乱的状况,开发效率也会大幅下降。
针对以上问题,业内已有很多相对成熟的解决方案,比如可以借助容器技术对项目的前后端代码进行封装,也可以借助云原生的理念,让后端能够提供出基于不同编程语言的SDK,进而降低前后端耦合度。
此外,团队还可以对前端和后端团队实行分离的开发流程,这样前端和后端团队可以各自制定适合自己的流程,从而提高各自的工作效率。
结语
对于一些一体化Web设计项目,由于项目本身不需要复杂交互、产品数据也十分敏感,那么此时就没有必要非要采用前后端分离架构。但如果项目有复杂的交互,后端的数据架构也很复杂,那么前后端分离架构或许更加合适。
之所以出现一体化Web设计比前后端分离架构更好的疑问,一方面可能是由于对前后端分离架构的误解,另一方面则可能是对一体化Web设计有着过高的预期,认为一体化Web设计不需要引入前后端分离也能应对各种复杂需求,但实际上这种认知本身就是有问题的。
前后端分离并非万能药,它只是解决某些特定问题的一个框架,团队在选择前后端分离之前,应该结合项目的具体情况进行分析,不应盲目跟风,更不应为了追求“快”而选择。