"

                                        ✅万博manbext|体育首页✅㊣全球最大,最信誉的线上综合平台✅万博manbext|体育首页✅千款游戏,砖石级服务,万博manbext|体育首页,欢迎各界玩家加入体验!

                                                                              "
                                                                              中培教育IT资讯频道
                                                                              您现在的位置:万博manbext|体育首页 > IT资讯 > 产品设计 > 前后端分离和解耦

                                                                              前后端分离和解耦

                                                                              2021-07-01 10:39:19 | 来源:中培企业IT培训网
                                                                              我们一起来探讨一下为什么要在软件开发中进行前后端的分离,如何做到前后端分离万博manbext|体育首页,如何解耦万博manbext|体育首页。如何解藕这在前后端分离的内容里面有提到过。它只算是一个小小的部分万博manbext|体育首页,但是东西虽小万博manbext|体育首页,但是它的内容丰富万博manbext|体育首页。想要做到解耦也需要调动许多的东西才行。它运行的过程也是很复杂的万博manbext|体育首页,成功做到并不容易。

                                                                              简单地说万博manbext|体育首页,就是要把复杂的问题简单化万博manbext|体育首页万博manbext|体育首页,把一个从0到N的问题转化为N个0到1的问题。另一个相近的说法就是“解耦”万博manbext|体育首页。

                                                                              举个例子,我们接到一个客户需求万博manbext|体育首页万博manbext|体育首页,要求写一个应用万博manbext|体育首页,这个应用中有页面的切换万博manbext|体育首页,有对应页面的数据交互万博manbext|体育首页万博manbext|体育首页,数据的获取万博manbext|体育首页万博manbext|体育首页,数据的计算,如果把这些功能放在一个单一的应用中的话万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,从大局观的角度来看,这个单一的应用是比较复杂的万博manbext|体育首页。

                                                                              为了降低这个复杂度万博manbext|体育首页万博manbext|体育首页,我们首先要做的就是前后端分开万博manbext|体育首页,关于前后端的定义万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,大体来说是这样的:前端负责的内容主要有页面路径管理万博manbext|体育首页万博manbext|体育首页,页面对应数据的显示与管理等等;后端负责的内容主要有数据的提供万博manbext|体育首页万博manbext|体育首页,数据的计算,安全性管理等等;前后端的通信一般通过HTTP请求来实现;当然这里也有个例外情况,比如有一部分功能可能要求实时性,像类似聊天类的功能万博manbext|体育首页,共享文档的功能万博manbext|体育首页万博manbext|体育首页,画板分享的功能,多人协同操作的功能等等万博manbext|体育首页,需要通过socketio这样的通信机制进行。

                                                                              再细分一下讲,单一的程序框架模型会是MVC(Model-View-Controller)结构的万博manbext|体育首页万博manbext|体育首页。前后端分离以后,后端会有Model/Entity-Repository/Service-Controller万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,前端会有View-Model-API调用万博manbext|体育首页万博manbext|体育首页。

                                                                              看一下前端部分,View主要是指网页的页面万博manbext|体育首页,手机端的页面(Android就是Activity万博manbext|体育首页,Layout和View等万博manbext|体育首页, iOS就是View Controller和UIView等),如果使用跨平台技术(如React Native, Flutter万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,Xamarin等)也离不开上述的概念,大同小异万博manbext|体育首页万博manbext|体育首页。这部分的处理当然离不开数据Model和API调用万博manbext|体育首页。处理好这些以后前端的任务也就做好了万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页。

                                                                              再看一下后端部分,界面相关的处理已经不再是后端的任务了,后端只需要通过API提供前端需要的数据就可以了万博manbext|体育首页。Controller就是用来定义这些API的,这一部分会分析或者计算出前端的输入和输出模型万博manbext|体育首页,具体处理方式有以下几个因素考虑:请求的类型如GET万博manbext|体育首页,POST万博manbext|体育首页, PUT万博manbext|体育首页, DELTE万博manbext|体育首页,PATCH等;数据From Body万博manbext|体育首页万博manbext|体育首页,数据From Route万博manbext|体育首页,数据From Form等等;数据处理完成以后万博manbext|体育首页,一个是通过API返回,一个是更新数据源万博manbext|体育首页,这里的数据源可以是数据库如SQL和NoSQL,可以是消息中间件如Kafka万博manbext|体育首页,也可以是数据缓冲服务器如Redis等等万博manbext|体育首页。通过上述的描述万博manbext|体育首页万博manbext|体育首页,我们可以看到后端的任务变得更加轻量级了万博manbext|体育首页,逻辑上也更加简单了万博manbext|体育首页万博manbext|体育首页。

                                                                              所以,通过前后端的分离万博manbext|体育首页,我们把前端和后端的复杂度始终维持在可控的范围内万博manbext|体育首页万博manbext|体育首页。如果在软件开发中始终使用这种理念的话万博manbext|体育首页,我们会大大扩展我们的软件开发效率和程序质量万博manbext|体育首页。因为解决一个N难度的问题显然要比解决N个1难度问题要困难得多。对于一个N难度的问题万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,我们将其分解为N个1难度的问题之后,我们可以各个击破万博manbext|体育首页,步步为营万博manbext|体育首页,一步一个脚印万博manbext|体育首页,在工作中从容而且自信万博manbext|体育首页万博manbext|体育首页,因为我们始终用最简单的方法去解决问题万博manbext|体育首页万博manbext|体育首页。如果碰上复杂的问题万博manbext|体育首页,就再将其分化为多个难度为1的问题万博manbext|体育首页万博manbext|体育首页,以此类推。简单一些讲,就是要保证我们在解决问题的时候万博manbext|体育首页,不打无准备之仗万博manbext|体育首页,始终脚踏实地万博manbext|体育首页万博manbext|体育首页,分而治之,避免把我们自己架到火炉上烤。

                                                                              复杂度降低以后万博manbext|体育首页,整个项目的维护成本和扩展成本都会非常的低万博manbext|体育首页万博manbext|体育首页。我们对项目开发的驾驭能力也会提高很多。

                                                                              再说一个数据流向的问题万博manbext|体育首页,这个主要发生在前端万博manbext|体育首页。 这部分的处理会直接关联到前端程序设计的复杂度万博manbext|体育首页。在三大前端框架中有双向数据流向和单向数据流向万博manbext|体育首页,其中React只支持单向数据流向万博manbext|体育首页万博manbext|体育首页。但是目前有了Hooks机制以后,你可以通过传Setter和Getter两个Reference来达到修改数据的目的万博manbext|体育首页。这种通过传递参数到其他Component的模式实际上增加了程序的复杂度万博manbext|体育首页万博manbext|体育首页,因为一层层的传递使得组件之间的耦合性增强了万博manbext|体育首页万博manbext|体育首页。

                                                                              那么如何解决这个问题呢

                                                                              在Angular中可以通过Service中定义Getter和Setter来解决这个问题万博manbext|体育首页,每个需要操作这个数据的组件都可以依赖注入这个Service万博manbext|体育首页万博manbext|体育首页,有了这个Service万博manbext|体育首页万博manbext|体育首页,就可以很轻松的读取和更新其中的数据了万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,对于数据的监听万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,可以通过在Service定义一个Subject,监听到数据变化以后万博manbext|体育首页,你可以更新界面万博manbext|体育首页万博manbext|体育首页,向服务器发送请求等等万博manbext|体育首页万博manbext|体育首页,这样做,组件之间的耦合性就大大降低了。

                                                                              再说一下单向数据流向机制如Ngrx, VueX, Mux等等。单向数据流向机制在目前的前端开发中使用很普遍万博manbext|体育首页,然而,实际上这种机制会增加程序的复杂度。这个主要是因为这种机制会在前端开发层级中引入另外一套体系来维护数据的流向,假如我们对已有的业务定义为从0到1的实现万博manbext|体育首页,加上这个机制以后万博manbext|体育首页,就变成了0到1再加上另外一个0到1.变成了0到2的问题。这就变复杂了。

                                                                              前端只要做好如下的任务如页面的切换万博manbext|体育首页,数据与后端的交互,数据模型与API的对应, 组件尽量的写成Self-Contained就可以了万博manbext|体育首页。

                                                                              所以我不建议在前端中再额外的添加类似的数据流向机制了万博manbext|体育首页。

                                                                              再谈一下后端的分析。我们在谈后端的时候,我们不太关心使用什么技术(Node JS万博manbext|体育首页,.net Core万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,SpringBoot万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,PHP, Python, Ruby On Rails等等)万博manbext|体育首页,这是因为后端的逻辑是清晰的,不管你用那种技术,程序的设计的层级是大同小异的。

                                                                              后端的主要任务是API数据的提供万博manbext|体育首页万博manbext|体育首页。比如用户相关的API,创建一个用户,更新一个用户万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,删除一个用户等等的操作都是在一个用户Controller定义相关的API。对于Controller的添加,我建议要根据业务层来添加万博manbext|体育首页,不要在一个Controller中做太多的事情。比如我们可以添加Book Controller来处理Book相关的操作万博manbext|体育首页,订单Controller来处理订单相关的操作万博manbext|体育首页万博manbext|体育首页。

                                                                              这样做是为了把API设计变成线性的万博manbext|体育首页万博manbext|体育首页,平行的,各自Controller之间的耦合性降到最低万博manbext|体育首页万博manbext|体育首页,从而也就降低了复杂度。

                                                                              进一步说万博manbext|体育首页,在实现的层级上万博manbext|体育首页,我们可以有Data Set对应数据库表格万博manbext|体育首页,Entity对应数据表格记录,Model对应API数据模型,Service/Repository负责逻辑实现等等万博manbext|体育首页。

                                                                              在后端技术选取中万博manbext|体育首页万博manbext|体育首页万博manbext|体育首页,数据库相关的操作是一个不可逾越的门槛万博manbext|体育首页,有的框架使用类似EntityFramework的机制如.NetCore和PHP Laravel, 有的使用类似JPA Hibernate万博manbext|体育首页万博manbext|体育首页,Mybatis如Spring Boot万博manbext|体育首页万博manbext|体育首页,有的则直接使用JDBC SQL语句执行的方式万博manbext|体育首页万博manbext|体育首页,有的结合Stored Procedure万博manbext|体育首页。在这个地方万博manbext|体育首页,按照程序复杂度排序的话,由低到高分别是EntityFrameWork

                                                                              当然万博manbext|体育首页,数据库的设计万博manbext|体育首页万博manbext|体育首页,数据库的升级Migration也都是关系到程序项目复杂度的因素。这个要结合具体的后端技术来谈。在本文中我们就不展开了。

                                                                              前后端分离的作用给用户带来了许多的便利?;チ肟萍际贝⒋娴哪甏虿﹎anbext|体育首页,会有怎样的浪潮出现万博manbext|体育首页?想要了解更多信息万博manbext|体育首页万博manbext|体育首页,请继续关注中培教育。

                                                                              万博manbext|体育首页