代码改变世界

软件架构(读书笔记1)

2012-01-13 16:37  康杜  阅读(234)  评论(0编辑  收藏  举报

Roy Thomas Fielding在他的那篇著名的博士论文<Architectual Styles and the Design of Network-based Software Architectures>中写道’In spite of the interest in software architecture as a field of research, there is little agreement among researchers as to what exactly should be included in the definition of architecture.’翻译过来是‘尽管研究人员想把软件架构作为一个的专门领域来研究,但是对于究竟如何定义软件架构才真正准确,他们却没有达成统一意见’。

 

Roy接着说,对于这种不统一的观点也令我们会根据过去的研究从不同的方面看待这个问题。那么是那几个方面来看待软件架构的呢?有如下几个方面

 

1.运行时抽象(Runtime Abstraction)

软件架构是组成该软件系统的各元素在运行时的某些操作阶段的抽象。一个系统可能有各种不同层次的抽象和不同阶段的操作,也就有相应的软件架构。软件构架的核心是抽象:通过封装隐藏系统的细节以更好地明确和支撑系统的属性。一个复杂的系统包含多个级别的抽象,每个抽象有响应的架构。

除此之外,一个软件系统会拥有多个操作阶段,比如启动,初始化,正常处理,重新初始化和停止。每个操作阶段拥有它的架构。

软件架构和软件结构(software structure)的区别在于软件架构是一种运行时的行为的抽象,而后者是静态的代码结构。相对于代码结构,软件架构是一种动态的抽象。

 

2.元素(Elements)

从系统元素的角度看,软件架构师指一组可配置的架构元素--组件,连接器,和数据。这些元素在一定的限制中相互联系。架构元素包括处理单元,数据和连接单元的连接。

组件(Component)是一个抽象的软件指令和内部状态,通过接口提供对数据的转换。对数据的转换的例子有,从硬盘加载数据到内存,然后对数据进行运算,再转换成不同的数据格式,等等。换句话说,组件是有它的接口和对其他组件的服务来定义的,而不是由它的实现定义的。

连接器(Connector)是一种抽象的机制作为不同组件之间通讯、协作的媒介。比如共享的展示,远程进程访问,消息传递协议和数据流。

数据 (Data) 数据是一个组件通过连接器向另外一个组件传递的信息。比如,字节序列,消息,序列化的参数和序列化的对象。

配置(Configuration)配置是指系统的各组件,连接器和数据在运行期一个架构联系的一种结构。

属性(Properties)包括功能属性和非功能属性(比如性能,扩展性等)

 

Network-based vs. Distributed

基于网络的软件架构和普通的软件架构主要的区别在于基于网络的软件架构是受到消息传送限制的。Tanebaum和van Renesse对分布式系统和基于网络的软件系统做了区分,他们认为分布式系统从它的用户的角度看就是一个集中式的系统,但是运行在多个独立的CPU上。而基于网络的系统是指可以通过网络操作的系统,它不必要对它的用户屏蔽这种特性。