原文地址:10 Common Software Architectural Patterns in a nutshell
是否曾经好奇过大型企业系统是如何设计的?在主要软件开发之前,我们需要选择合适的架构,为我们提供所需的功能和质量属性。因为,在我们应用架构到我们的设计中之前,我们应该了解不同的架构
什么是架构模式?
架构模式是对给定上下文中软件架构中常见问题的通用、可重用的解决方案。架构模式类似于软件设计模式,但范围更广。
在这篇文章里面,我将简单的解释下面十种常见架构模式的用法和优缺点:
- 分层模式(Layered pattern)
- 客户端-服务端模式(Client-server pattern)
- 主从模式(Master-slave pattern)
- 管道过滤模式(Pipe-filter pattern)
- 中继器模式(Broker pattern)
- 对等模式(Peer-to-peer pattern)
- 事件总线模式(Event-bus pattern)
- MVC模式(Model-view-controller pattern)
- 黑板模式(Blackboard pattern)
- 解释器模式(Interpreter pattern)
1. 分层模式
这种模式可以用来组织可以分解成子任务组的程序,每个子任务组都处于特定的抽象层。每一层都为下一层提供服务。
一般信息系统中最常见的4层如下:
- 表示层 (也称为UI层)
- 应用层 (也称为服务层)
- 业务逻辑层 (也称为域层)
- 数据访问层 (也称为持久化层)
用例
- 一般桌面程序
- 电商网站程序
2. 客户端-服务端模式
这个模式包含2部分:一个服务端和多个客户端。服务端组件为多个客户端组件提供服务。客户端从服务端处请求服务,服务端提供相关服务给客户端。因此服务端需要持续监听客户端的请求。
用例
- 在线应用比如邮箱,文档分享和银行业务
3. 主从模式
这个模式由两部分组成:主服务和从服务。主服务组件分配任务给独立的从服务组件,并且主服务器组件根据从服务组件返回的结果计算出最终的结果
用例
- 在数据库复制中,主数据库被视为原始来源,从属数据库与之同步
- 连接到计算机系统总线的外围设备(主驱动器和从驱动器)
4. 管道过滤模式
这个模式可以用来组织生成和处理流的程序。每个处理步骤被封装在过滤器组件中。要处理的数据通过管道传送。这些管道可用于缓冲或同步目的。
用例
- 编译器。连续过滤器执行词汇分析、解析、语义分析和代码生成
- 生物信息学中的工作流
5. 中继器模式
这种模式用于构造具有解耦组件的分布式系统。这些组件可以通过远程服务调用相互交互。代理组件负责协调组件之间的通信。
服务器向代理发布其功能(服务和特性)。客户端向代理请求服务,然后代理将客户端重定向到其注册表中合适的服务。
用例
- 消息代理软件,如Apache ActiveMQ、Apache Kafka、rabitmq和JBoss消息传递
6. 对等模式
在这种模式中,单个组件被称为对等体。对等体既可以充当向其他对等体请求服务的客户端,也可以充当向其他对等体提供服务的服务器。对等体可以充当客户端或服务器,或者两者兼而有之,并且它可以随时间动态地改变其角色。
用例
-
文件共享网络,如Gnutella和G2
-
P2PTV和PDTP等多媒体协议
7. 事件总线模式
这个模式主要处理事件,有4个主要组成部分;事件源、事件监听器、通道和事件总线.源将消息发布到事件总线上的特定通道。听众订阅特定频道。听众会被告知发布到他们之前订阅的频道的消息。
用例
- 安卓按开发
- 通知服务
8. MVC模式
这个模式,也称为MVC模式,将交互式应用程序分成三部分:
- 模型-包含核心功能和数据
- 视图-向用户显示信息(可以定义多个视图)
- 控制器-处理来自用户的输入
这样做是为了将信息的内部表示与向用户呈现和接受信息的方式分开。它分离组件并允许高效的代码重用。
用例
- 主要编程语言中www应用的架构
- Web开发框架,比如Django和Rails
9. 黑板模式
这种模式对于不没有确定性解决策略的问题很有用。黑板图案由三个主要部分组成:
- 黑板-一个包含了来自解决空间的对象的结构化全局内存
- 知识源-具体自己展示形式的特别模块
- 控制组件-选择、配置和执行模块
所有组件都可以访问黑板。组件可能会产生添加到黑板上的新数据对象。组件在黑板上寻找特定类型的数据,并且可以通过与现有知识源的模式匹配找到这些数据。
用例
- 语音识别
- 车辆识别和跟踪
- 蛋白质结构鉴定
- 声纳信号解释
10. 解释器模式
此模式用于设计一个组件来解释用特定语言编写的程序。它主要指定如何评估程序行,即以特定语言编写的句子或表达式。基本思想是为语言的每个符号都有一个类。
用例
- 数据库查询语言,比如SQL
- 用于描述通信协议的语言
架构模式的比较
下表总结了每种架构模式的优缺点: