10 个常用的软件架构模式
你是否曾经思考过如何设计大型的企业级系统?在决定启动软件开发之前,首要的是选择恰当的架构来指引系统的功能及质量属性设计。因此在将软件架构应用于设计之前,必需要了解常用的架构模式。
什么是架构模式?
Wikipedia 的解释:
在软件架构中,架构模式是对特定环境下常见问题的通用且可重用的解决方案。架构模式与软件设计模式很相似,但架构模式的层次更高,且外延更大。
这篇文章将简述常见的 10 种架构模式的概念、用法以及其优缺点。
-
分层模式(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. 分层模式(Layered pattern)
分层模式用于对结构化设计的软件进行层次拆解,每个层次为独立的抽象,为其上层抽象提供服务。
系统通常被拆分为以下四个层次:
-
表示层(也称为 UI 层)
-
应用层(也称为服务层)
-
业务逻辑层(也称为领域层)
-
数据访问层(也称为持久化层)
使用场景
-
通用桌面应用程序
-
电子商务 Web 应用
2. 客户端/服务器模式(Client-server pattern)
客户端/服务器模式由两个部分构成:一个服务器与多个客户端。服务器组件同时为多个客户端组件提供服务。客户端向服务器发启服务请求,服务器将相应服务信息回应给客户端。此外,服务器持续监听来自客户端的请求。
使用场景
-
电子邮件、文件共享及银行业务等在线应用
3. 主/从模式(Master-slave pattern)
主/从模式由两个部分构成:主设备与从设备。主服务组件将作业分发给多个从设备组件,并根据这些从设备反馈的结果,计算生成最终结果。
使用场景
-
数据库复制,主数据库被认定为权威数据源,各从数据库与主数据保持同步
-
在计算机系统中通过总线互连的各设备(包括主设备与从设备)
4. 管道/过滤器模式(Pipe-filter pattern)
管道/过滤器模式用于构造用于生成及处理数据流的系统。每个处理过程都封装在过滤器(filter)组件之中,要处理的数据通过管道(pips)进行投递。管道同时用于作为过滤器(filter)间的缓冲及同步。
使用场景
-
编译器,一系列的过滤器用于词法分析、语法分析、语义分析及代码生成
-
生物信息学的工作流
5. 代理模式(Broker pattern)
代理模式用于在结构化系统中对组件解耦。系统内各组件间采用远过程调用(remote service invocations)的方式交互。 代理(Broker) 组件充当组件间通讯的协调角色。
提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理。
使用场景
-
消息中间件软件:Apache ActiveMQ,Apache Kafka,RabbitMQ 与 JBoss 等等
6. 对等模式(Peer-to-peer pattern)
对等模式中的组件称之为对等体(peer),对等体既作为向其他对等体请求服务的客户端,同时也做为响应其他对等体请求的服务端。对等体可以在运行过程中动态地改变其角色,即,既可以单独做为客户端或服务端运行,又可同时作为客户端与服务端运行。
使用场景
7. 事件总线模式(Event-bus pattern)
事件总线模式应用于事件处理,主要由四个组件构成: 事件源(event source),事件侦听者(event listener),通道(Channel)以及总线(event bus) 。 事件源将消息发布到总线的特定通道,侦听者订阅相应的通道,事件源所发布的消息经通道通告给订阅通道的侦听者。
使用场景
-
Android 开发
-
通告(Notification)服务
8. 模型/视图/控制器(MVC)模式(Model-view-controller pattern)
模型/视图/控制器模式(简称 MVC 模式)将交互式应用程序拆分为三个部分:
-
模型(model) – 包含核心功能及数据
-
视图(view) – 呈现信息给用户(通过有多个视图)
-
控制器(controller) – 处理用户的输入操作
MVC 模式通过将内部信息表示、用户信息呈现以及用户操作接收分开的方式解耦组件,实现高效代码重用。
使用场景
9. 黑板模式(Blackboard pattern)
黑板模式适用于无预知确定解决策略的问题,主要由三个组件构成:
-
黑板(blackboard) – 用于存储解空间对象的结构化全局内存
-
知识(knowledge) 源 – 能自表意的专用模块
-
控制(control) 组件 – 选择、配置与执行的模块
所有的组件均能访问黑板,组件可将新生成的数据对象写入黑板,也可以通过模式匹配从黑板中获取知识源所生成的特定数据。
使用场景
-
语音识别
-
车辆识别和追踪
-
蛋白质的结构鉴定
-
声纳信号解析
10. 解析器模式(Interpreter pattern)
解析器模式用于设计语言的解析程序,主要用于指定评估程序代码行,即解析出特定语言的语句与表达式,其核心思想是为语言的每个符号定义相应的类。
使用场景
-
SQL 等数据库查询语言
-
通讯协议描述语言
上述架构模式的对比
下表格总结了各架构模式的优缺点
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java类的加载机制- jvm系列(一)
类加载机制的奥妙。 1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 {:.center} 类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误 加载.class文件的方式 从本地系统中直接加载 通过网络下载.class文件 从zip,jar等归档文件中加载.class文件 从专有数据库中提取.class文件 将Java源文件动态编译为.class文件 2、类的生命周期 {:.center} 其中类加载的过程包括...
- 下一篇
java 区块链中设计合理的难度系数
难度系数的概念 区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易。难度系数越高,相应越难。例如比特币的难度系数是18。 难度系数一般是hash值的前置0的个数。 java 区块链中设计合理的难度系数 例如难度系数定为6,也就是区块的有效hash,必须前面有6个0 例如难度系数为6的有效hash为:00000048bfdc5e67aa448686438f1350a6cc7f4477feb5562b0368a808fdef57 具体代码实现也很简单: /** * *类名:BlockService.java *描述:区块服务 *时间:2018年3月12日下午7:05:06 * *@authorcn.wenwuyi *@version1.0 *@paramhash区块hash *@returnboolean */ privatebooleanisValidHashDifficulty(Stringhash){ //定义难度系数 intdificutty=6; //定义标志符0(当然也可以定义其他,一般是0) charzero='0'; inti; for(i=0;i&...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Linux系统CentOS6、CentOS7手动修改IP地址