解耦-用RAC处理网络请求

解耦-用RAC处理网络请求,第1张

首先看一下项目层次,除了MVC之外,每个小模块都有一个Manager层来管理所有的网络请求,当然,如果你的项目是MVVM的话,可以直接放到ViewModel层里面.

比如说我们有一个"我"这个模块,里面有一个TableView,是我的朋友的列表,对应朋友信息Model,然后我们在进入这个页面的时候请求一次服务器,拿到所有朋友信息.

在请求的时候,我们一般会调用自己二次封装AFHTTPSessionManager的AFN请求管理类,里面有我们的一些基本配置之类的,然后拼接URL,加上参数就调用了.

但是这里面有一个问题,当你的项目越来越大,你请求的URL会遍布整个项目,每个Controller中都会有好几个URL,好几个参数,当这些东西在后面维护中要变化的时候,维护起来就乱了很多.

所以我们给每个模块都设置一个网络管理层,是NetworkManager也好,是ViewModel也好,都是这个作用.

下面看两种请求的例子:

其中,NetworkTool是二次封装AFN网络请求类,其中方法每个人都有不同写法.总之最后把请求成功接收到的数据转Model后把对象sendNext出去就好如果没有数据返回,就判断是否成功,然后sendNext个nil就好

在Controller里面,我们引用这个模块的网络管理者,然后调用即可

多了一层的好处是每层的职责单一,相互直接依赖降低了(就是解耦),容易拓展功能和后期的维护,如果更改了接口的话,可以直接去NetworkManager中更改,不用再去Controller中全局搜索更改了,更加清晰,达到集中管理请求的目的

而且当业务需求增加了,其他Controller也需要调用这个接口的时候,可以直接引用这个NetworkManager调用请求方法,不用再复制粘贴一遍了

优势有:

一、安全方面

云服务器具有T3+的高安全标准,具有很高的防御机制和自我保护功能。物理服务器是自建机房,机器的故障率高。

二、应用性能

云服务器可快速获取性能需求,进行业务部署,后期业务增加,也可增加部署。物理服务器业务增加需要实际增加设备,消耗巨大的成本,也需投入时间和人力。

三、节约成本

云服务器是按需消费支付,避免浪费,降低综合成本。物理服务器从设备采购到应用部署,消耗大量人力物力资金,综合成本太高。

四、管理省心

云服务器可在远程管理平台进行操作管理,免去运维投入。物理服务器离不开运维人员繁杂不同业务管理。

五、时效性高

云服务器可付费后立即生效。物理服务器需要选购设备,对比等复杂过程,耗时近半个月以上。

编辑本段简介

数学中解耦是指使含有多个变量的数学方程变成能够用单个变量表示的方程组,即变量不再同时共同直接影响一个方程的结果,从而简化分析计算。通过适当的控制量的选取,坐标变换等手段将一个多变量系统化为多个独立的单变量系统的数学模型,即解除各个变量之间的耦合。最常见的有发电机控制,锅炉调节等系统。软件开发中的耦合偏向于两者或多者的彼此影响,解耦就是要解除这种影响,增强各自的独立存在能力,可以无限降低存在的耦合度,但不能根除,否则就失去了彼此的关联,失去了存在意义。

工程背景

在现代化的工业生产中,不断出现一些较复杂的设备或装置,这些设备或装置的本身所要求的被控制参数往往较多,因此,必须设置多个控制回路对该种设备进行控制。由于控制回路的增加,往往会在它们之间造成相互影响的耦合作用,也即系统中每一个控制回路的输入信号对所有回路的输出都会有影响,而每一个回路的输出又会受到所有输入的作用。要想一个输入只去控制一个输出几乎不可能,这就构成了“耦合”系统。由于耦合关系,往往使系统难于控制、性能很差。

主要分类

三种解耦理论分别是:基于Morgan问题的解耦控制,基于特征结构配置的解耦控制和基于H_∞的解耦控制理论。 在过去的几十年中,有两大系列的解耦方法占据了主导地位。其一是围绕Morgan问题的一系列状态空间方法,这种方法属于全解耦方法。这种基于精确对消的解耦方法,遇到被控对象的任何一点摄动,都会导致解耦性的破坏,这是上述方法的主要缺陷。其二是以Rosenbrock为代表的现代频域法,其设计目标是被控对象的对角优势化而非对角化,从而可以在很大程度上避免全解耦方法的缺陷,这是一种近似解耦方法。

编辑本段相关解法

选择适当的控制规律将一个多变量系统化为多个独立的单变量系统的控制问题。在解耦控制问题中,基本目标是设计一个控制装置,使构成的多变量控制系统的每个输出变量仅由一个输入变量完全控制,且不同的输出由不同的输入控制。在实现解耦以后,一个多输入多输出控制系统就解除了输入、输出变量间的交叉耦合,从而实现自治控制,即互不影响的控制。互不影响的控制方式,已经应用在发动机控制、锅炉调节等工业控制系统中。多变量系统的解耦控制问题,早在30年代末就已提出,但直到1969年才由E.G.吉尔伯特比较深入和系统地加以解决。

完全解耦控制

对于输出和输入变量个数相同的系统,如果引入适当的控制规律,使控制系统的传递函数矩阵为非奇异对角矩阵,就称系统实现了完全解耦。使多变量系统实现完全解耦的控制器,既可采用状态反馈结合输入变换的形式,也可采用输出反馈结合补偿装置的形式。给定n维多输入多输出线性定常系统(A,B,C)(见线性系统理论),将输出矩阵C表示为 C戁为C的第i个行向量,i=1,2,…,m,m为输出向量的维数。再规定一组结构指数di(i=1,2,…,m):当C戁B=0,C戁AB=0…,C戁AB=0时,取di=n-1;否则,di取为使CiAB≠0的最小正整数N,N=0,1,2,…,n-1。利用结构指数可组成解耦性判别矩阵: 已证明,系统可用状态反馈和输入变换,即通过引入控制规律u=-Kx+Lv,实现完全解耦的充分必要条件是矩阵E为非奇异。这里,u为输入向量,x为状态向量,v为参考输入向量,K为状态反馈矩阵,L为输入变换矩阵。对于满足可解耦性条件的多变量系统,通过将它的系数矩阵A,B,C化成为解耦规范形,便可容易地求得所要求的状态反馈矩阵K和输入变换矩阵L。完全解耦控制方式的主要缺点是,它对系统参数的变动很敏感,系统参数的不准确或者在运行中的某种漂移都会破坏完全解耦。

静态解耦控制

一个多变量系统在单位阶跃函数(见过渡过程) 输入作用下能通过引入控制装置实现稳态解耦时,就称实现了静态解耦控制。对于线性定常系统(A,B,C),如果系统可用状态反馈来稳定,且系数矩阵A、B、C满足关于秩的关系式,则系统可通过引入状态反馈和输入变换来实现静态解耦。多变量系统在实现了静态解耦后,其闭环控制系统的传递函数矩阵G(s)当s=0时为非奇异对角矩阵;但当s≠0时,G(s)不是对角矩阵。对于满足解耦条件的系统,使其实现静态解耦的状态反馈矩阵K和输入变换矩阵L可按如下方式选择:首先,选择K使闭环系统矩阵(A-BK)的特征值均具有负实部。随后,选取输入变换矩阵 ,式中D为非奇异对角矩阵,其各对角线上元的值可根据其他性能指标来选取。由这样选取的K和L所构成的控制系统必定是稳定的,并且它的闭环传递函数矩阵G(s)当s=0时即等于D。在对系统参数变动的敏感方面,静态解耦控制要比完全解耦控制优越,因而更适宜于工程应用。

软件解耦

做事情要想事半功倍,就要高处着眼,触摸到事情的脉络。当今流行着各种眼花缭乱的软件框架,不管是struts,还是spring,hibernate,还是.net,还是各种前端UI框架,其设计的核心思想是: 1、尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术; 2、各种解耦技术的核心是: (a)使用外部的配置文件,将各种框架内部的组件进行文本型的配置; (b)用户通过组件的名字和参数map使用组件,达到脚本性而非代码性的直接使用。 这与设计一个应用服务器的架构完全相同。只不过spring使用xml类型的配置文件,并且使用Ioc技术,而我使用服务数据库化,用数据库来管理服务。我不支持类,它们支持类。 java比C++功能强大的地方就在于其强大易用的反射机制,对C来说,开发一套反射机制的难度还是很大的,需要修改编译器。 各种高层软件设计的核心其实就是如何解耦和增强可扩展性,可扩展性的核心是插件技术,而插件技术也与解耦的方案有关。 配置这个术语的诞生,就是解耦技术带来的,因为要解耦,所以需要进行配置。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/161777.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-23
下一篇2023-03-23

发表评论

登录后才能评论

评论列表(0条)

    保存