如果是问“什么是正确的前后端分离”,偶还真不敢回答,生怕自己的理解有什么偏差;但是问怎么“理解前后端分离”,那偶可以结合自身的工作,谈谈偶对前后端分离的理解,也欢迎大家提出不同的理解。
偶07年参加工作就是做企业级项目的开发,那时候的一些项目都只有一个包,没有什么代码规范,业务逻辑散落在各处,甚至是JSP中直接访问数据库并做业务处理。
后来逐渐有了一些规范,页面就是页面,代码就是代码,很多项目开始使用Ajax框架。
发展的更进一步,后端代码有了分层,cotroller/service/dao,可能每个项目分层策略不同(三层和两层居多),每层的叫法不同(cotroller还是action),数据从页面到最后访问数据库,需要走到多个分层中。
不过到了此阶段,在企业级项目的开发过程中,Java程序员依然要兼顾前后端的开发,所以前端页面的样子嘛,达不到美观的程度,也就是能用。
继续发展,很多项目开始变成了前后端分离。对于前后端分离的定义偶是这样理解的:
页面是页面,代码是代码,但是他们在一个包中,这个肯定不能算前后端分离;
前端页面一个程序包,后台代码一个程序包,两个包都需要部署到Tomcat上,前端调用后台的接口;偶认为这个也不是严格的前后端分离,但是偶觉的这样做也没有问题;
如果前端只有HTML文件,放到HTTP服务器上,浏览器只访问获取这些HTML就好了,数据是从后台程序提供的接口获得;这样才算是前后端就分离了。
前后端分离有很多的好处:前端开发和后端开发可以各司其职,约定好接口之后就可以并行开发;后端接口可以复用,如果项目同时有电脑网页端、移动网页端、APP端等多个入口的时候,后端可以只有一个;
带来好处的同时,也会有一些缺点,例如:增加了架构的复杂性,如果技术能力不足的团队,可以考虑半分离(例如大家部门都是企业级应用,都没有前端开发人员);如果是面向互联网的应用,需要搜索引擎抓取,就需要服务器端渲染;另外前后端交互的接口,也需要花时间和精力设计。
最后,是否需要使用前后端分离,还需要根据项目的实际情况决定。