【叶凡网络】系统架构前后端分离的想法,Web应用架构的新趋势

2014-02-22 13:28:24 | 新闻来源:叶凡网络 | 点击量:1367

一个很宏观的想法,没有太多技术实现细节,如果这个想法如果针对存量系统,确是一个颠覆性的方案,如果Web前端允许一切重头来做,个人觉得这还是很好的一个思路。前后端分离是Web前端专业化的万里长征第一步,如果这一步做好,前端就有一套专属自己的优质环境,那时候Web前端就会有更大的余力做更优秀的工作,这就是愿景。讲servlet书都很老了现在b/架构已经不是几年前的b/架构,最近研究servlet看书时候书里讲到c/架构到b/架构的演变。其实b/架构就是web应用开发,对于这样的架构我现在应该考虑的前端和后端的分离(注意:这里的后端是指服务端)

Web前端工程师成为一个独立的技术岗位,富客户端应用的普及导致Web前端技术开发更加专业化。Web前端开发技术的难度也越来越高,前后端的分离就是为Web前端开发营造一个良好的开发环境,不要让前端工程师被一些不可控的外在因素所影响(例如:前后端的耦合性)最后导致前端不能专心致志做出更加好的作品。所以,前后端分离是让前后端更加专业化,技术和管理上将前端角色更加明确,更深入的挖掘前端开发的价值。有些系统采用分布式架构,上图是目前大部分系统的架构图。层与层之间使用了远程调用框架,但是实质上都逃不开上面这个架构设计。这张图是一张比较合理的图,实际开发里最常发生的事情就是控制层Control越过服务层Servic直接处置下面的资源。

这个工种的发生主要是针对互联网行业的需求,Web前端现在一个独立的技术工种。以前的文章里曾经讲到过,一个大型互联网网站,例如想淘宝网,绝对不是一个Web项目,而是一群web项目的集合,那么如果不在前端进行整合,这么多web项目前端开发一定存在大量重复劳动,并且运维时候也存在难以统一管理的问题。本文假想一个面对需要前端资源整合的组织,如何做到前后端分离的解决思路。

B端和S端从技术体系角度而言异构性很大,做Web开发也可以说是B/S架构开发。换而言之就是B端使用的技术和S端使用的技术不适于同一个体系,这样的结果导致实际开发中,很难做到专业分工,如果项目开发过程中管控不到位,这样的问题可能会影响到整个项目的开发质量,因此前后端分离的目的之一就是要做到专业化分工,提高项目的质量和开发效率。当下的Web开发形势已经和以前有了很大的不同,随着技术的发展。早期的Web项目是一个封闭的项目,用户从浏览器里看到页面直到后台数据库都是一个项目里集成的而现在Web系统的规模越来越大,中大型的Web系统是一个开放式的系统,开放型的系统用户在浏览器发起的请求可能会转发到外部的系统里进行处理,或者是外地的系统和外部系统一起完成请求的处置,此外有的请求可能不会直接请求数据库,而是请求缓存服务器,这些变化几乎都是发生在Web系统的服务端,前后端耦合度很高的Web系统服务端的复杂度提升肯定带来了Web前端的复杂度的提升。因此Web前端从系统架构的角度也需要更加专业的管控,管控的作用之一就是前后端进行分离,降低前端对服务端的依耐性。

但是开发过程中控制层Control和服务层Servic经常混淆不清,前后端耦合的问题主要发生在控制层,Control控制层是前端和服务端交互的边境。这就是前后端耦合度高的重要原因。就是要划清控制层的边境,因此要前后端解耦。控制层到底该属于前端还是服务端,MVC模式里控制层作用是调度,控制层不是写业务逻辑的地方,因此将大量业务逻辑写到控制层其实是违背了MVC模式的思想,同时控制层是前端和服务端通讯的桥梁,其实控制层是参入了前端的工作任务,既然控制层要剥离业务操作同时控制层也要参入前端应用的开发,那么将控制层归为前端的一部分是完全合情合理合规的。

编程随意性大养成了坏习惯,把控制层剥离了业务逻辑处置可能会让人不知道如何开发了觉得有这种想法的人是开发时候没有理解透MVC模式思想。这个就需要这些人一点点去适应技术新趋势的发展。前端项目包括上图里的浏览器和控制层,前后端分离的终极目标应该是前端和服务端是完全独立的项目。服务端项目包括服务层、DA O层等等,前端项目和服务端项目以高效的远程调用框架做通讯介质,项目开发时候前端项目做前端的事情,服务项目做服务端的事情,这样就让服务端开发的人员没有机会在控制层乱写代码了保证了Web前端环境的地道性,最后生产发布也要独立部署,这样就达到前后端真正解耦,但是前后端的沟通机制也是不可或缺的觉得它之间的沟通使用高性能的远程调用框架,前后端相互约定通讯报文格式。.

但是服务端要把心思花在数据处置上,其实不管服务端还是前端宏观流程无非是输入数据à数据处置à输出数据。前端要更多关心的输入输出数据时候的用户体验操作,服务端开发最大的问题就是违背MVC原则,代码编写的随意性,而前端不管出于平安还是性能考虑,最好是尽量少牵涉业务。前端和后端通讯层的独立,会将前后端进行真正的解耦,前面我讲到前后真正问题就是前端和后端技术路线不一致,但是保守Web开发里前后端又要融为一体,这就导致前后端很难做到专业化分工,对于前端应该尽量弱化通讯级别的开发工作,前端通讯编程只要知道调用哪个接口,传什么参数,怎么处置响应信息就行了这样就能让前端和后端实现真正的专业化。

就不会发生开发时候前后端边界不清的问题了做到这些,本文主题应该是前后端分离。要革以前系统的命,对存量系统那该如何处理,答案还是重构代码,想方设法逐步减少已经发现的前后端耦合度高的问题,这个跟我之前的建议就是小重构和大重构的区别,如果有人觉得我上面建议合适,前端组应该马上提供一套这样的框架进去,这样后面的新系统就不会在循环前面的错误了觉得搭建这样的框架不会太复杂的,理清前后端的边境,上面的前后端分离的目的就是将前端资源整合为一个整体。这些做完后,前端组里该如何提升自己的能力了,工程化,这时候要让前端的东西项目化。前端技术不能再当做开发者的玩具,也是需要大量的系统架构,开发规范,自动化压缩混淆,自动化发布,前端监控和分析,前端优化等等。

 

通过实际业务需求去完善和丰富这些组件,Web前端的核心人员应该花更多精力去设计、积累、整理各种组件。最终达到组件可以覆盖到全公司绝大多数场景,最终通过组件积累形成完善的Web前端开发规范,这样的规范覆盖面广更加易于操作,对于企业而言Web前端开发流程就可以做到规范化,从而达到简单培训一些技术能力不高的开发人员就能完成相关的开发任务,同时也让Web前端核心人员也能很好的把控项目的质量和进度。

Web前端的组件,一个企业内部。不管这个组件是UI层级,还是javascript开发层级,都脱离不了该企业业务产品的模式,其实看看像网易,新浪这样的门户网站的前端应用组件,用于做门户很合适,但是用它来做企业应用软件可能就不是太好使用,因此对于组件要有一个清晰的认识,觉得可以把组件按业务场景分类,这里我可以举个例子,如果这个企业有给门户使用的组件,而这个组件很适合门户,应该把它归为门户组件,如果某些组件适合做网站后台管理的那么就列为后台管理组件,如果某些组件能跨多了业务场景则标志为通用组件。这样我可以有针对性的积累和完善这些组件,做分类的原因是为了理清组件的应用边境。有意识的开发相关的组件,最终形成一个针对某个业务组件的组件仓库,这样等新需求过来,Web前端的项目经理或Web前端的技术经理可以通过场景分析该需求需要使用那些现有的技术,需求里的那些场景是要进行开发,新场景里有没有新开发的代码能生成新的组件,这就可以做到有计划有次序的积累。

上一篇:【叶凡网路】关于朝鲜人权的报告是对政治挑衅 下一篇:【叶凡网络】风险补偿金规模待扩大,多地加速试点农地抵押贷款