文档名称:软件架构风格(software architecture style) 文档维护:Xuefeng Chang(welfear@gmail.com) 文档建立:2013.07.27 若是说设计模式是从代码角度为系统下降耦合度,那么架构风格即是从数据角度解耦。 架构是更加宏观和全面的视角,它再也不是解决单一的技术问题,而是为系统提供更加 完整的解决方案。 架构风格是一种粗粒度的软件模式,为常见软件问题提供解决方案,促进软件的重用。 常见的软件架构风格以下: 1.Pipe & Filter 2.Batch 3.VM 4.Layered Architecture 5.MVC, PAC 6.MicroKernel 7.Event System 8.Blackboard System 9.Broker, C/S, P2P, SOA 参考http://www.infoq.com/news/2009/02/Architectural-Styles-Patterns 每种架构风格适用于某种特定的问题域,好比第九项所有是分布式计算领域的架构风格。 从用户最多见的GUI和CUI环境视角看: CUI经常是具备单一输入和单一输出,比较擅长处理有机械性、重复性和规律性的问题。 GUI更擅长有交互性的任务,它的输入和输出之间时常会变化并加以排列组合。 CUI和GUI是一种演化的关系: 1.当输入是单一流或者多个单一流时,架构风格每每是Pipe & Filter/Batch/N Layered。 2.当输入是多个流时,架构风格一般是MVC/PAC。 3.当须要合并多个输入流时,则会使用Event System/MicrosKernel。 4.当须要合并多个输出流时,则会使用Blackboard System。 对于1,在Linux中系统管理员和程序员经常使用Pipe & Filter处理文本流;而在流媒体系统中, Pipe & Filter用来demux视频流和音频流。这种固定输入流的任务很容易实现批量功能而 变成Batch状态。VM虚拟机能够简单看做是复杂输入而没有相应输出的任务。Layed Arch 是一种存在依赖的Pipe & Filter,它的处理顺序和流程已经事先设定好。 对于2,MVC不单单是设计模式,当它能解决多个输入流问题时,它成为为一种架构风格。 MVC以及其衍生的MVVC, MVP, PAC将输入模块,数据模块和协调控制模块分解开来。相似的 模型比较强调Control的做用。 对于3和4,它们经常和MVC共同使用。3, 4表明一种处理更复杂问题的通常思路。数据可能 是输入或输出,也多是一种解耦的方式。好比实现接口的虚表就是一种解耦数据。直接 传递数据会下降系统性能,上下文情景分析和有效数据分离都会增长计算时间开销。 Event System每每会维护原始的上下文和当前变化数据的信息,这些数据出如今输入流的 最开始处理阶段或着是先后处理模块的衔接过程。Blackboard System强调了Model的做用, 拥有共同的Model特别是Domain Model能够在更宏观的层面上为系统解耦或接入更多的 生产者与消费者。