主要介绍各种Architectural Styles, 例如C/S, 以及一系列奇奇怪怪的styles。
为了避免翻译失真,所有风格都保留英文单词。同时为了应付考试,我会在每个style后面列出英文关键词。
Traditional, language-influenced styles
Main program and subroutines
这个Style感觉就是C语言的面向过程
的思想。项目中包含主程序
于子过程(函数)
等组件。组件之间使用函数调用
连接。
关键词: procedure-oriented
, main program
, subroutines
, procedure calls
Object-oriented
所有的组件都是Object
, Object
之间用Method invocation
通信。
关键词: Object
,Method invocation
Layered
Virtual machines
在Virtual machines
中,存在层级关系,每一层都有一些列服务
或者接口
,供上一层调用。下图就是一个例子。
关键词: layer offers a set of services
, services accessed by layer above it
Client server
是一个特殊的virtual machine
。 只有两层(C和S),并通过网络协议连接。如下图。
关键词: two layers virtual machine with network connection
Data-flow styles
Batch sequential
是一种因计算设备限制而提出的一种古老技术。在这种技术中,我们会将一个大问题简化为几个小部分,每个部分用磁带
交互。现在该技术应该被淘汰了。
关键词: data processing when limitations fo computing equipment
, subdivided into severable components
,transfer by magnetic tapes
Pipe and filter
各个filter program
间通过stream
连接。灵活弱耦合但是效率略低。
关键词: filter program connects by stream
Shared memory
Blackboard
很有意思的一个Styles,这里可以通过一个故事来讲解。有几个专家解决一个问题。每个专家解决一个小问题后可以将内容写到黑板
上,然后其他专家可以根据黑板上的内容继续解决问题,然后写到黑板上,知道整个问题被彻底解决。
在这个Style中,有一个共享的黑板
用于交流信息,因此叫做Blackboard
。下图中也可以看到三个专家
共享一个黑板
关键词: experts
,one blackboard
Rule based
在这里,共享的是knowledge base
。这是一个包含很多事实
并能产生规则的数据库。这些规则就像if .. then
语句。该系统有两个功能:插入数据(事实)
和查询
。个人感觉就是一个数据库,内部存储一系列数据,然后我们去查询是否有满足特定条件的数据,然后返回true/false
。Prolog
就是基于rule based
的语言,具体可以看这里。
关键词: knowledge base
,contains facts and production rules
, query the goal
下图就是一个例子,fact
是burnrate
; goal
是查询是否landed
。我们需要不断修改burnrate
值,然后通过查询,看当前是否满足规则<=(a,0),<(v,3)
。满足的话就说明land
成功。
Interpreter
Basic interpreter
就像linux指令的解释器。输入一条指令,inference engine
解析指令,然后执行。
关键词: inference engine parse a command
, performs variable resolution
Mobile code
在这里,我们会把代码传输到一个远程主机解析。
举例来说,在分布式系统中,如果需要处理大量数据,我们更倾向于把代码传输到含有数据的主机上执行,这样效率更高。
关键词: code transmitted to a remote host for interpretation
Implicit invocation
Event-based
不同独立的部分通过在event bus
上发送event
来交互。当组件接受到一个event
,会决定是接收或者无视。
最初的Event-based
中,所有组件共享一个event bus
,这样效率很低。因此现在的event-based
只会向感兴趣的组件发送event
。所以,现在event-based
和publish-subscribe
没有本质区别了。
关键词: send event
, event bus
, react or ignore an event
Publish-subscribe
很经典的style,这里不多解释。
关键词: publisher create information
, subscriber be informed of the information
Peer to peer
在一个网络中有很多松耦合的节点。两两节点可以交互。每个节点既是client
也是server
关键词: loosely coupled autonomous peers
, act both as client and server
Derived styles
这部分应该不会考到,暂且先搁置一边。