14. Interpreter / virtual machine (解释器/虚拟机)

软件架构的数据流总结(三)_应用程序

典型样例:Java 虚拟机,Rule-based systems,脚本语言(JavaScript)

原理:Program or Script加载到解释器,创立Program和环境的链接。解释器从程序中读取指令并处理,从而影响Environment。

问题:比直接执行要慢许多;需要定制debugger;需要开发和实现特征丰富的编程语言。其实像python,Matlab,java都应该属于这种类型。

15. Hub-And-Spoke

软件架构的数据流总结(三)_数据_02

应用:用来连接不兼容的遗留系统(legacy systems);

工作机制:spoke在hub上注册和取消注册。spoke X 发送消息给spoke Y时,先通过hub将X language转变为中间表示,然后再转变为Y language,最后将消息发送给spoke Y。

问题:More complex (debugging);Single Point of failure (hub)

16. Event Bus or Message Bus

软件架构的数据流总结(三)_发送消息_03

典型样例:Process monitoring;Trading systems;Software development environments。

应用:当应用(app)可以被分解为功能独立的且能通过简单的消息通讯的模块时,可以选用这种架构。

工作机制:这些模块能够在run-time加入和移出。当一个模块希望与其他模块通讯时,就在Event Bus上放一个消息,然后Event Bus负责传递消息给收件人。有几种通讯可能发生在Event Bus上,1)发布-订阅(publish-subscribe):当一个模块发布消息到Bus上,所有订阅的Module都会收到;2)广播(broadcast):消息将传递给所有module;3)点对点(point-to-point):两两之间的通讯。这种机制跟各种总线通讯有点相似了,比如RS422、RS485等通讯协议,或者是网络通讯中的一些协议相关。

问题:当模块之间共享大量的数据时,再通过bus来pump数据可就不明智了。还要注意同步问题。

17. Structural Model (Synchronizer,同步器)

软件架构的数据流总结(三)_发送消息_04

应用:飞行模拟器。这种pattern用在复杂的time-critical系统。当你需要联合定期或不定期的控制流时。当你的模块需要定期升级或者通过彼此之间发送消息使得状态改变的情况下。

工作机制:这种模式的核心是一个控制环:以固定的时间周期运行,被叫做时间间隔或时间帧。pattern包括一个应用特定部分,叫做应用级,一个一般的部分,叫做执行级。

 

18. Ports-And-Adapters / Hexagonal Architecture

软件架构的数据流总结(三)_mvc_05

这种结构的主要目的是将应用的核心逻辑与它使用的服务去耦合,允许不同的服务插入(plugged in),也允许应用在没有那些服务的时候照样执行。

core logic或者business logic是应用程序的核心;而services是不必要的,在不改变应用程序目的的情况下,是可以替代的。比如:数据库访问和其他类型的存储,用户接口元件,e-mail和别的通讯元件,硬件设备等。

优势:core logic能够独立于服务进行测试;很容用其他更适合需求改变的服务代替。

The primary adapter calls the API functions of the core logic。

这种应用可以被不同类型的用户使用,每个用户都可以创建他们自己的应用变体,通过插入定制的adapters。

 

完结

 

最后再总结一下:对于软件architecture,每个人都有每个人的设计,上面给总结的是比较鲜明的18种基于数据流的框架pattern,有些虽然不用自己去设计,但是在理解某些开发方式的时候是非常有益处的:比如MVC组件模型(或者PAC模型),很明显基本上GUI界面的设计都是基于这种模式,理解了这种模式,再进行界面开发时就有一种鸟瞰的感觉;比如virtual machine;比如Master-Slave等。

有些可能比较常见,比如MVC、PAC、Pipe and Filter,Master-Slave,layered system,client-server,state machine等,有些比较专用:structural model等。

对于常见的模型,能有一个比较好的深入理解,对于阅读程序或者是开发大型程序都是极有帮助的。

希望总结能对后续的学习有一定的帮助!