首先,简单介绍一下我对软件体系结构的认识。架构风格能改进分块,还能为频繁出现的问题提供解决方案,以此促进设计重用。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,软件架构师或者系统架构师陈述软件架构以作为满足不同客户需求的实际系统设计方案的基础。从目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。
软件架构师与客户商谈概念上的事情,与经理商谈广泛的设计问题,与软件工程师商谈创新的结构特性,与程序员商谈实现技巧,外观和风格。
我最先接触的是经典的三层架构。时间是在大一下学期,做的事一个BSS论坛网站。这是我做的第一个网站,用的是ASP.NET框架。当时很多东西不是很懂,但是知道就是那么用,知其然而不知其所以然。
我使用过的第二种风格应该算是客户端服务器风格。时间是大二上学期,做的程序是一个多线程的C/S结构的聊天软件。
我使用的第三种风格应该是面向对象。是在面向对象程序课程设计实验中用到了这种风格,当时写的是一个小的学生选系统,有学生,老师,管理员等几个对象。
我用到的第四、五种风格应该是分离表现层和面向服务架构(SOA)。时间是最近一年,是以一个前后端分离的网站为主体的一个系统。在前后端分离的这个过层中将将处理用户界面的逻辑从用户界面(UI)视图和用户操作的数据中分离出来。后端是以API的形式向前端暴露服务。并且在系统其他模块中用到了外界提供的Web Services服务。
目前还没用过的架构有基于构建的架构,消息总线,管道和过滤器等软件体系结构风格。原因可能是因为我面向的主要是Web以及比较上层的软件开发,对于偏向硬件的开发接触的比较少的原因。这一点从我使用的编程语言上也能看出一二。
In software engineering, a pipelineconsists of a chain processing elements(processes, threads, croutines,functions, etc.),arranged so that the output of each element is the input ofthe next; the name is by analogy to a physical pipeline. Usually some amount ofbuffering is provided between consecutive elements. The information that flowsin these pipelines is often a stream of records, bytes or bites, and theelements of a pipeline may be called filters; that is also called pipes andfilters design pattern. Connecting elements into a pipeline is analogous tofunction composition.
图3-1管道/过滤器风格的体系结构
总结:
Filter: 每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器
Pipeline: 连接件就像是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。
图3-2 数据抽象和面向对象体系结构
总结:
对象:构件
An event can be defined as "asignificant change in state”.
基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
从体系结构上说,这种风格的构件是一些模块,这些模块既可以是一些过程,又可以是一些事件的集合。过程可以用通用的方式调用,也可以在系统事件中注册一些过程,当发生这些事件时,过程被调用。
The ability toprovide a design of different levels of abstraction can
System design and business process designcan both use this.
It is a technique used in designingcomputer software, hardware, and communications in which system or networkcomponents are isolated in layers so that changes can be made in one layerwithout affecting the others.
图3-4 层次系统风格的体系结构
总结:
1) 我用过的层次系统风格是三层架构,用于对User Interface Layer、Business Login Layer、Data Access Layer进行分层。
2) 在计算机通信协议中层次系统也得到了充分的使用,每一层提供一个抽象的功能,作为上层通信的基础。较低的层次定义低层的交互,最低层通常只定义硬件物理连接。
C2体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
1)系统中的构件和连接件都有一个顶部和一个底部;
2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
3)一个连接件可以和任意数目的其它构件和连接件连接;
4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
图3-5 C2风格的体系结构
C2风格特点:
1) 系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;
2) )所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的;
3) 构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相关性假设。
JB/HMB风格基于层次消息总线、支持构件的分布和并发,构件之间通过消息总线进行通讯,如图所示。消息总线是系统的连接件,负责消息的分派、传递和过滤以及处理结果的返回。各个构件挂接在消息总线上,向总线登记感兴趣的消息类型。构件根据需要发出消息,由消息总线负责把该消息分派到系统中所有对此消息感兴趣的构件,消息是构件之间通讯的唯一方式,构件接收到消息后,根据自身状态对消息进行响应,并通过总线返回处理结果。由于构件通过总线进行连接,并不要求各个构件具有相同的地址空间或局限在一台机器上。该风格可以较好地刻画分布式并发系统,以及基于CORBA,DCOM和EJB规范的系统。
图3-6 基于消息总线的体系结构
如图所示,系统中的复杂构件可以分解为比较低层的子构件,这些子构件通过局部消息总线进行连接,这种复杂的构件称为复合构件。如果子构件仍然比较复杂,可以进一步分解。如此分解下去,整个系统形成了树状的拓扑结构,树结构的末端结点称为叶结点,它们是系统中的原子构件,不再包含子构件,原子构件的内部可以采用不同于JB/HMB的风格,例如数据流风格、面向对象风格及管道/过滤器风格等,这些属于构件的内部实现细节。但要集成到JB/HMB风格的系统中,必须满足JB/HMB风格的构件模型的要求,主要是在接口规约方面的要求。另外,整个系统也可以作为一个构件,通过更高层的消息总线,集成更大的系统中。于是,可以采用统一的方式刻画整个系统和组成系统的单个构件。
总结:
1) 每一个URI代表一种资源;
2) 客户端和服务器之间,传递这种资源的某种表现层;
3) 客户端通过四个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化“。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删