作者 | 崔皓,审校 | 孙淑娟,做过软件架构设计的同学都清楚,软件架构要解决的核心问题就是对不同的软件应用使用重复的软件架构模式,说白了就是达到架构级别的重用。也就是说,在不同的软件系统中,使用不同类型的软件架构,将软件架构的使用进行抽象,再对其分类,用这些历经时间打磨的软件架构套用不同的应用场景,也就是架构师常说的架构套路。这个套路就是今天我们要说的软件架构风格。,软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式( idiomatic paradigm)。,架构风格包括四个要素:,对软件架构风格的研究和实践促进了对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。架构风格不变的部分使不同的系统可以共享同一个实现代码。,软件架构风格的分类,说完了软件架构风格的定义,接下来看看它的分类。由于软件的应用场景众多,对其软件架构的抽象也不在少数。我们需要对软件架构进行分类,甚至在分类的基础上建立子类。,如下是对软件架构风格的基本分类:,虽然架构风格多种多样,在不同的应用场景我们会选择不同的架构风格与之对应,接下来我们会举一个实际的例子,通过对例子的分析引出架构风格的应用。,前面描述了软件架构风格的分类,多是定义略显枯燥,这里会应用一个车辆定速巡航的例子看看如何应用软件架构的风格。,如下图所示,如果要开发一套定速巡航系统,从而确保车辆能够随时调整其行进的速度。,,如上图所示,巡航控制系统有多个输入和一个输出,系统想要达到的目的就是通过这些输入参数去调整油门这个输出参数,也就是控制油门,最终达到保持车速的目的。说白了,就是不过输入参数如何改变,车辆都保持一定的速度,因此油门就要随之调整。,一起来看看这些输入/输出要素的定义:,1.架构风格场景分析,既然有了具体的案例,就需要通过具体的使用场景来分析使用哪种架构风格?,适合面向对象架构风格的应用场景:,上面描述的正是一个典型的事件驱动场景,适合于面向对象风格。面向对象架构风格的特征是将数据标识和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。,再换一个角度,适合面向控制环路架构风格的应用场景:,司机通过调整计速器达到了预期速度之后,系统维持恒定速度行驶,但是在行驶过程中会遇到路面颠簸、拐弯等情况,车辆速度不可能一直保持恒定,在上述情况下车辆速度会降低。降低的车速实际是整个系统的输出,这个输出会作为输入再次返回到系统中,系统会将这个速度与预期的速度进行比较,如果低于预期的速度,会进行加速的操作。同理,如果超过了预期的速度就会执行减速的操作。,这是一个典型的闭环控制的情景,系统需要在外界情况不断发生变化的情况下进行调整,使得系统状态尽可能接近期望状态。,过程控制环路(闭环):是将过程输出的指定属性维护在一个特定的参考值(设定值),将事务处理看成输入、加工、输出、反馈、再输入的一个持续的过程模型。,这里的输入就是车辆的当前速度,加工就是求得预期速度与当前速度的差,反馈就是进行增速还是减速,再将得到数据给到输入,不断循环。,有了对应用场景的分析之后,再从面向对象和控制环路两种风格如何,看如何设计架构。,2.面向对象架构风格分析,对于系统的增减速功能,采用面向对象风格的巡航控制系统首先会定义司机、油门、时钟、速度计和车轮等构件。,,整个计算的主要过程如上图所示:,整个过程在时钟的控制下定期向速度计发送消息,重复执行2~4。,3.控制环路架构风格分析,控制环路的架构风格以控制器为核心,期望速度、车轮脉冲、时钟和油门等作为构件。,,具体的计算过程如上图所示:,反复执行3和4形成速度的反馈闭环。,所谓架构风格就是经过时间考验的架构分析的套路,针对不同的应用场景可以利用不同的架构风格,说到底就是对软件架构的复用,让前人设计的架构能够被反复使用。架构风格分为:数据流、返回调用、独立构件、虚拟机、仓库、控制环路等多种。,文中我们通过汽车定速巡航的例子,引出了面向对象和控制环路的两种架构风格,告诉大家如何从应用场景的定义选择适合的架构风格。并且,针对两种不同的架构风格,给出了架构分析的具体方法。,崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。曾任惠普技术专家。乐于分享,撰写了很多热门技术文章,阅读量超过60万。《分布式架构原理与实践》作者。
© 版权声明
文章版权归作者所有,未经允许请勿转载。