通俗地讲述10种常用的软件架构模式

标签: | 发表时间:2018-06-02 10:46 | 作者:
出处:https://mp.weixin.qq.com

有没有想过如何设计大型企业级系统? 在开始开发主要软件之前,我们必须选择一个合适的架构来为我们提供所需的功能和质量等属性。 因此,在将它们应用于我们的设计之前,我们应该了解不同的架构体系。

什么是架构模式?

下面引用自维基百科

架构模式是在特定环境下软件体系结构中常见问题的通用可重用解决方案。架构模式类似于软件设计模式,但它属于更广泛的领域。

在本文中,我将简要地解释以下10种常见的架构模式及其用法,优缺点。

  1. 分层模式

  2. 客户端-服务器模式(CS模式)

  3. 主从模式

  4. 管道过滤器模式

  5. 经纪人模式(又可以称为代理模式)

  6. 点对点模式

  7. 事件总线模式

  8. MVC模式(模型-视图-控制器)

  9. 黑板模式

  10. 解释器模式

1.分层模式

这种模式可以用来构建能分解为子任务组的结构化程序,每个子任务都处于特定的抽象级别。每层为下一更高层提供服务。

一个通用信息系统常见的4层如下:

  • 呈现层(UI-用户界面层)

  • 应用层(service-服务层)

  • 业务逻辑层(domain-领域层)

  • 数据访问层(persistence-持久化层)

用途

  • 常用的桌面应用

  • 电子商务web应用

2.CS模式

这个模式包含两个部分:一个服务端+多个客户端。服务端组件提供给多个客户端组件服务。客户端请求服务,服务端提供相应的服务给客户端。除此之外,服务端不间歇地监听来自客户端的服务请求。

用途

  • 在线应用程序,如电子邮件,文件共享和银行业务

3.主从模式

这种模式由两部分组成:主人(master)和奴隶(slaves)。主组件将工作分配给特定的从组件,并根据从组件返回的结果计算最终结果。

用途

  • 在数据库复制中,主数据库被视为权威来源,并且从属数据库与其同步

  • 在计算机系统中连接到总线的外设(主从驱动器)

4.管道过滤器模式

这个模式可被用于构建生成和处理数据流的系统。每个处理步骤都包含在一个过滤器组件中。被处理的数据需通过管道进行传递。这些管道可用于缓冲或同步目的。

用途

  • 编译器。使用连续的过滤器执行词法分析,解析,语义分析和代码生成。

  • 生物信息学工作流程

5.经纪人模式

这个模式用于使用架构的组件来构建的分布式系统。这些组件可以通过远程服务调用相互交互。代理组件负责协调组件之间的通信。服务端将其能力(服务和特性)发布给代理。客户端向经纪人请求服务,然后经纪人将客户重定向到其注册的对应服务。

用途

  • 消息代理软件,如Apache ActiveMQ,Apache Kafka,RabbitMQ,JBoss Messaging

6.点对点模式

在这种模式中,单个组件被称为同级点(Peer:身份,级别相同的点)。 同级点可以既作为客户端,向其它同级点请求服务,又作为服务器向其它同级点提供服务。 一个同级点既可以充当客户端或服务器或两者兼而有之,并且可以随着时间动态地改变其角色。

用途

  • 文件分享网络,例如Gnutella,Gnutella2

  • 多媒体协议,例如P2PTV、PDTP

7.事件总线模式

这个模式主要用于处理事件,有4个主要的组件:事件源,事件监听器,频道,事件总线。事件源将消息发布到事件总线上的特定频道。监听器订阅特定频道。监听器会收到发布到他们之前订阅的频道的消息。

用途

  • android 开发

  • 通知系统

8.模型-视图-控制器模式

这个模式又叫MVC模式,他把交互式应用程序分成了3个部分。

  • 模型,包含核心功能和数据

  • 视图,把信息呈现给用户(可能有多个视图)

  • 控制器,处理用户输入

用途

  • 使用主流的编程语言架构的web应用程序

  • web框架如Django、Ruby on Rails

9.黑板模式

这种模式对于没有确定性解决策略的问题是有帮助的。黑板模式由3个主要组件组成。

  • 黑板-一个包含来自解决方案空间对象的结构化全局内存

  • 知识源-具有自我表达的专用模块

  • 控制组件-选择,配置,执行模块

所有组件都可以访问黑板。 组件可能产生添加到黑板的新数据对象。 组件在黑板上查找特定类型的数据,并可能通过与现有知识源的模式匹配找到这些数据。

用途

  • 语音识别

  • 车辆识别与跟踪

  • 蛋白质结构鉴定

  • 声纳信号解释

10.解释模式

此模式用于设计解释用专用语言编写的程序的组件。 它主要指定如何解释执行程序代码,称为用特定语言编写的句子或表达式。 基本思想是为语言的每个符号设置一个类。

用途

  • 数据库查询语言例如SQL

  • 用于描述通信协议的语言

架构模式的比较

下表总结了每种架构模式的优缺点(表里面的英文就不翻译了)



相关 [讲述 软件架构 模式] 推荐:

通俗地讲述10种常用的软件架构模式

- -
有没有想过如何设计大型企业级系统. 在开始开发主要软件之前,我们必须选择一个合适的架构来为我们提供所需的功能和质量等属性. 因此,在将它们应用于我们的设计之前,我们应该了解不同的架构体系. 架构模式是在特定环境下软件体系结构中常见问题的通用可重用解决方案. 架构模式类似于软件设计模式,但它属于更广泛的领域.

软件架构

- - 研发管理 - ITeye博客
    对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的.     1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求. 架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的.

软件架构设计

- - 企业架构 - ITeye博客
软件架构设计尚没有万灵的方法论支持,还是个非常新兴的行业,给出个人理解的行业软件架构设计过程,受个人水平有限,仅供参考:. 1.业务分析:针对目标行业的业务战略、蓝图、业务功能及流程进行分析,提出其中部分功能可以使用信息化进行处理,通过分析可以得出信息化要解决的问题. 2.解决方案设计:根据业务战略,形成行业信息化解决方案.

软件架构风格 - welfear

- - 博客园_我所说的,都是错的
文档名称:软件架构风格(software architecture style). 文档维护:Xuefeng Chang(welfear@gmail.com). 文档创建:2013.07.27. 如果说设计模式是从代码角度为系统降低耦合度,那么架构风格便是从数据角度解耦. 架构是更加宏观和全面的视角,它不再是解决单一的技术问题,而是为系统提供更加.

软件架构师的沟通修炼

- - 博客 - 伯乐在线
在架构师的角色中,沟通是要求有效果的必备技能与工具. 换句话说,沟通是架构师指示别人或群体完成特定行动唯一真正有效的手段. 架构师通常没有对为其项目工作的他人的直接管理权. 他们的项目往往是跨部门的,也可能会跨好多个行业单位. 由于不能直接管理他人,所以架构师指示别人或群体完成特定行动的能力就受到限制.

软件架构师的职责

- - 研发管理 - ITeye博客
架构师需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调.     在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必须得到架构师的认可. 架构师需要和分析人员反复交流,以保证自己完整并准确地理解用户需求.

软件架构设计(二)——软件架构设计过程

- - BlogJava-首页技术区
      一般来讲,涉众包括客户(资方)代表、承接方(劳方)代表、用户代表.       对于要明确实现某种标准的软件系统,通常确定边界非常容易,直接按标准圈定的scope分析即可,比如像SIPServlet容器,是要求遵从JSR168规范的,那么软件系统的Scope就是JSR168规定的Scope,但是也有例外,比如客户或者劳方明确指定要复用一个现有的实现了部分功能的系统或组件,那么Scope就不同了.

软件架构师不等同于资深程序员

- - 研发管理 - ITeye博客
本文的作者Armel Nene是ETAPIX Global公司的首席架构师,他居住在伦敦,他参与过的开源项目包括 Apache Lucene,,Apache Nutch, Liferay 和 Pentaho等. 如今很多的公司的IT部门仍然认为招聘一个资深的程序员,他同样也能承担软件架构师的角色. 资深程序员对整个软件生命周期很了解,他们可以经过培训成为架构师,但他们不等同于架构师.

如何开展软件架构之需求分析

- - CSDN博客架构设计推荐文章
如何开展软件架构之需求分析.  在开始讨论如何开展软件架构之前,先让我们来看一张漫画. 相信大家看到这漫画的时候,总会不自主地会心一笑,客户希望得到礼物,我们却给了他一骨头. 一):未进行充分地需求分析. 解析:架构师未能初别用户群及使用环境约束因素,也许在接到项目时,他还在想着上一个为狗开发的项目,在这个项目中自然而然地认为用户是狗.

软件架构师不等同于资深程序员

- - 外刊IT评论
本文的作者Armel Nene是ETAPIX Global公司的首席架构师,他居住在伦敦,他参与过的开源项目包括 Apache Lucene,,Apache Nutch, Liferay 和 Pentaho等. 如今很多的公司的IT部门仍然认为招聘一个资深的程序员,他同样也能承担软件架构师的角色. 资深程序员对整个软件生命周期很了解,他们可以经过培训成为架构师,但他们不等同于架构师.