软件设计要素初探:架构模式
在 “软件设计要素初探” 一文,尝试从软件设计的整体角度,综合讨论了软件设计的各种要素。本文探讨系统组件交互的架构模式。
概述
架构模式是系统组件及组件交互的模式,决定了处理数据和领域对象的全局控制结构。组件化是使用架构模式的前提。 可参阅 《面向模式的软件架构》了解更多架构模式。
模式清单
分层模式
- 分层模式: 将应用划分为多个层次,定义各层的接口、任务抽象及消息格式,以及各层之间的通信与交互。业务系统通常会划分为业务逻辑层、服务层、领域层、数据层。网络栈协议是分层模式的典型应用。应用分层模式时,为确保系统可维护性,通常第j+1层只依赖于第j层的接口和服务;在性能场合下,可能会有跨层依赖的情况;应对特殊场景的设计中,会有“第j层的服务依赖于第j+1层的服务”的反向依赖关系。可参阅《面向模式的软件架构:模式系统》第2.2.1节。
RESTFUL模式
- RESTFul模式:适合资源构建与共享的可伸缩的架构模式,适合于构建API接口。全局规范一致的资源逻辑命名、寻址、返回码定义,关注资源与数据而非行为或服务;无状态的声明式的请求;对客户端隐藏实现细节;通用的数据返回格式(JSON),跨语言与平台;使用名词而非动词作为路径名。 可参阅《架构之美》第5章:“Web:面向资源的架构”。
MVC模式
- MVC模式:“模型-视图-控制”, 经典的WebUI架构模式,控制处理请求从而更新模型和返回视图,模型更新驱动视图更新,视图请求控制处理。经典的JavaMVC框架有 Struts2, SpringMVC, 前端MVC框架有Extjs4.
插件模式
- 插件模式:设计了可扩展的插件接口及插件交互机制,开发者只要遵循规范编写和调试具体的插件并融入到系统,即可为系统增加新功能和新特性。使用插件模式的系统有 Eclipse, Emacs, Firefox, Chrome 等。
订阅-消费模式
- 订阅-消费模式: 大型互联网应用中几乎都存在订阅和消费业务表更新或业务消息推送的子系统。订阅-消费模式需要高稳定可用的消息中间件,并仔细评估消息延迟对用户活动造成的影响。新品消息推送、商品消费订阅、发货提醒等,我们正处于一个“消息/通知的订阅-推送-被消费”的移动互联网时代里。
Pipeline模式
- 管道-过滤器-处理器链:一个请求沿着管道连接的处理链,依次由链上的过滤器、拦截器、处理器进行处理并返回。JavaWeb应用的Servlet架构模式是“过滤器-处理器链”的典型应用;UnixShell 则是“管道-过滤器-重定向”结构的典型应用。
事件驱动模式
- 事件驱动模式: 在系统内定义一系列的组件、事件及监听器,组件发生变化时触发事件,通知相应的监听器处理事件更新组件,进而触发新的事件,如此循环直至手动终止系统或系统崩溃。适用于GUI应用开发。
Actor模式
- Actor模型: 基于事件驱动的分布式的、异步并发的、可伸缩的、有故障恢复能力的大型消息处理架构。一个简单例子可参见:“混合使用ForkJoin+Actor+Future实现一千万个不重复整数的排序(Scala示例)”
规则-工作流模式
- 规则-工作流模式: 将系统分析成一系列的工作流节点以及规则的解析匹配,使用规则引擎来控制和运行,通过添加规则及规则流,实现可扩展性和可配置性。可参阅使用规则引擎计算工资的简单例子:“Java Drools5.1 规则流基础【示例】”,“基于规则和规则引擎的系统” 。