精华内容
下载资源
问答
  • 软件架构模式

    千次阅读 2017-10-11 21:58:57
    软件架构模式有: 管道——–过滤器模式,适用于批处理系统 面向对象模式—— 其典型应用是基于组件的软件开发 事件驱动模式—— 其典型的应用包括各种图形界面应用 分层模式——-如ISO/OSI的七层网络模型 C/S模式,...

    软件架构模式有:

    1. 管道——–过滤器模式,适用于批处理系统

    2. 面向对象模式—— 其典型应用是基于组件的软件开发

    3. 事件驱动模式—— 其典型的应用包括各种图形界面应用

    4. 分层模式——-如ISO/OSI的七层网络模型

    5. C/S模式,该模式客户端与服务器分离,允许网络分布操作、

    转载注明:http://blog.csdn.net/u011046042/article/details/78209003

    展开全文
  • 软件架构模式笔记

    千次阅读 2016-09-01 09:33:35
    本文内容整理自Mark Richards所著书籍《软件架构模式》(Software Architecture Patterns)。分层架构 模式特点 模式分析 事件驱动架构 中介Mediator拓扑结构 代理Broker拓扑结构 模式分析 补充 微内核架构 模式分析 ...

    本文内容整理自Mark Richards所著书籍《软件架构模式》(Software Architecture Patterns)。

    分层架构

    模式特点

    分层架构模式中的组件被分成几个平行的层次,每一层都代表了应用的一个功能,它们是具体工作的高度抽象,能够实现某种特定的业务逻辑。大多数的分层架构都被从上到下分为四层:展示层业务层持久层数据库层

    分层架构的一个突出特点是组件间关注点分离,一个层中的组件只会处理本层的逻辑。架构中的每一层都是封闭的,业务请求需要一层一层的传递,但当系统中大部分的请求都只是通过层传递,而层不对请求做任何处理时,可以适当开放一些层。

    模式分析:

    • 当不确定项目中使用什么架构时,可以使用分层架构
    • 容易开发,适合大多数的商业商业项目
    • 可测试性高,各个层之间不相互依赖,易于测试
    • 整体灵活性低,经常出现组件间的紧耦合
    • 不易部署,对组件的小改动可能影响整个程序的发布
    • 性能低,业务请求要穿越所有层
    • 伸缩性低,分层架构构建的应用都难以扩展

    事件驱动架构

    事件驱动架构是一种主流的异步分发事件架构模式,由高度解耦、单一目的的事件处理组件组成,这些组件负责异步接收和处理事件。事件驱动架构常用于设计高度可拓展的应用,使用这种架构模式架构应用时,必须不断地考虑哪些事件能被单独处理,哪些事件不能被单独处理,并为此设计相应事件处理器的处理粒度。

    中介(Mediator)拓扑结构

    在中介拓扑结构中主要有四种组件:事件队列(event queue)事件中介(event mediator)事件通道(event channel)事件处理器(event processor)

    在事件驱动架构中主要有两种事件:初始事件待处理事件。初始事件是事件中介所接收到的最原始的事件,没有经过其他组件的处理;待处理事件是有事件中介生成,由事件处理器接收的事件。不能把待处理事件看做初始事件经过处理后得到的事件。

    事件中介通过事件通道将与初始事件的每一个执行步骤相关的特定待处理事件传递给事件处理器。事件队列将队列中的事件发送给事件中介,事件中介为每一个初始事件中的步骤发送一个特定的待处理事件到事件通道中,触发事件处理器接收和处理该待处理事件。需要注意的是:事件中介只知道初始事件中有哪些步骤需要被处理,而不会参与到对初始事件的必须处理的业务逻辑的实现之中。

    一般来说,每个事件处理器组件都只完成一项唯一的任务,并且事件处理器在完成其特定的业务工作时不能依赖其他事件处理器。

    代理(Broker)拓扑结构

    在代理拓扑结构中主要包括两种组件:代理事件处理器。代理可以被集中或者关联在一起使用,此外,代理中还可以包含所有事件流中使用的事件通道。存在于代理组件中的事件通道可以是消息队列、消息主题或者是两者的组合。代理拓扑结构适用于具有以下特征的场景:事件处理流相对比较简单,不需要使用核心的事件分配和调节机制以提高处理事件的效率。

    代理模式中没有核心的事件中介,事件流在代理拓扑结构中通过一个轻量的消息代理将消息串联成链状分发至事件处理器组件中进行处理。每一个事件处理器只负责处理一个事件,并向外发送一个事件,以标明其刚刚执行的动作。在这其中有一个细节需要注意:处理初始事件后,由事件处理器发出的事件不被其他事件处理器接受、处理的情况时有发生,尤其是在为应用添加功能和进行功能扩展时。

    代理拓扑结构的设计思想就是将对事件流的处理转换为对事件链的业务功能处理。在代理拓扑结构中,一旦某个事件处理器将事件传递给另一个事件处理器,那个这个事件处理器就不会与该事件的后续处理产生任何联系。

    模式分析

    • 整体灵活性高,能在不断改变的使用场景下快速响应
    • 易于部署,其中代理拓扑结构比中介拓扑结构更易进行事件调度
    • 可测试性低需要特定的测试工具来产生事件,其异步处理的特性也为单元测试带来了一定困难
    • 性能高,高度解耦、异步并行操作大大减少了消息传递过程的时间开销
    • 伸缩性高,事件处理器能够单独进行细粒度的扩展而不会影响其他事件处理器
    • 不易开发,需要考虑异步处理机制、协议创建流程和错误环境控制

    补充(?)

    中介(Mediator)拓扑架构会统一管理所有事件,将事件拆分并分发给事件处理器;

    代理(Broker)拓扑架构不拆分事件,直接将事件发送给事件处理器,事件处理器指处理自己能够处理的部分,忽略自己无法处理的部分,然后将事件继续传递给其他事件处理器处理;

    另外Proxy模式需要开发者手动拆分事件然后交给Proxy。

    微内核架构

    微内核架构模式(也称为插件化架构模式)是基于产品的应用程序的第一选择,也可以将其嵌入到其他架构模式中。微内核应用模式可以通过插件的形式添加额外的特性到核心系统中,这提供了良好的扩展性,也使得新特性与核心系统隔离开来。

    微内核架构主要需要考虑两个方面:核心系统插件模块。应用逻辑被划分为独立的插件模块和核心系统,核心系统通常是为特定的条件定义了通用的业务逻辑,而插件模块根据这些规则实现了具体的业务逻辑。微内核本身没有指定任何的实现方式,唯一的规定就是插件模块之间不要产生依赖

    核心系统需要了解插件模块的可用性以及如何获取它们。一个通用的方法是使用插件注册表,这个注册表中含有每个插件模块的信息,包括它们的名字、数据规约以及远程访问协议。

    插件和核心系统的通信规范包含标准规范和自定义规范。自定义规范的典型使用场景是插件组件是被第三方构建的。在这种情况下,通常是在第三方插件规约和核心系统的标准规约间创建一个Adapter来使核心系统不需要知道插件模块的具体细节。当创建标准规范时,从一开始就创建一个版本策略是非常重要的。

    模式分析

    • 整体灵活性高,能够快速适应不断变化的环境
    • 易于部署,插件可以在运行时被动态的添加到核心系统中
    • 可测试性高,插件模块能够独立的进行测试
    • 性能高,可以只加载需要的模块,移除消耗资源但是没用的功能
    • 伸缩性低,微内核架构的系统通常都比较小
    • 不易于开发,需要考虑设计和规约管理
    展开全文
  • 经典软件架构模式

    千次阅读 2020-08-30 22:20:26
    文章目录目录软件架构模式分层架构模式(Layered Architecture Pattern)基于事件的模式(Event-based Pattern)微内核模式(Microkernel Pattern)微服务模式(Microservices Pattern)基于空间的架构模式(Space-...

    目录

    软件架构模式

    架构模式是常见问题的案。
    软件架构模式是经过验证的、针对特定场景的,具有良好设计结构的、通用的、可重用的解决方案。更具体地说,架构模式是在实践中归纳总结的一组设计决策,具有明确定义的属性,并可以重复使用。

    软件开发有时可以看作是选择,定制和组合架构模式的过程。软件架构师必须决定如何采用哪几种架构模式,如何使这些架构模式与软件系统特定的上下文相适应。

    分层架构模式(Layered Architecture Pattern)

    分层架构模式是最常见的架构模式,此模式用于可分解为子任务的结构化程序,每个子任务都位于特定的抽象层级,每一层都为上一层提供服务。

    分层体系架构模式的每一层在应用程序中都有特定的角色和职责,这意味着所有组件都是互连的,但彼此之间不依赖。分层体系架构模式的强大功能之一是,组件之间职责分离。特定层中的组件仅处理与该层有关的逻辑。

    例如,一般信息系统最常见的 4 个层次:

    1. 表示层(也称为 UI 层)
    2. 应用层(也称为服务层)
    3. 业务逻辑层(也称为领域层)
    4. 数据访问层(也称为持久层)

    优点:

    • 高可测试性,每一层都可以单独测试。
    • 高度易于开发,因为这种模式众所周知,并且实现起来并不太复杂,而且大多数公司都通过逐层分离技能来开发应用程序,这种模式已经成为大多数业务应用程序开发的自然选择。
    • 可维护性。
    • 易于单独更新某一层。

    应用场景:

    • 标准业务线应用程序,其功能不只是 CRUD 操作。
    • 需要快速构建的新应用程序。
    • 适用于经验不足的开发团队。
    • 需要严格的可维护性和可测试性的应用。

    基于事件的模式(Event-based Pattern)

    用于开发高度可扩展系统、常见于分布式异步架构模式,该架构模式由用于监听并异步处理事件的一系列组件组成。事件驱动的架构模式构建了一个接收所有数据的中央单元,然后将其委托给处理特定类型的单独模块。

    这种模式也被称为订阅发布模式,有 4 个主要组件:事件源、事件监听者、通道和事件总线。事件源将消息发布到事件总线上的特定通道,监听者订阅特定的通道,消息发布到监听者之前订阅的通道,监听者将收到消息的通知。

    优点:

    • 容易适应复杂,经常混乱的环境。
    • 弹性伸缩。
    • 当出现新的事件类型时,很容易扩展。

    应用场景:

    • 具有异步数据流的异步系统。
    • 用户界面交互。
    • 通知服务。
    • 注册中心。

    在这里插入图片描述

    微内核模式(Microkernel Pattern)

    微内核架构模式,也称插件模式,这种模式允许你将其他应用程序功能作为插件添加到核心应用程序,从而提供可扩展性以及功能分离。

    微内核架构模式主要由两种组件构成:

    1. 核心系统组件:仅包含使系统运行所需的最小功能。
    2. 插件模块:提供应用程序功能和自定义处理逻辑的可扩展性,灵活性和隔离性。

    微内核架构模式的最佳示例是 Eclipse IDE。Eclipse 本身只为你提供一个编辑器功能。但是,一旦开始添加插件,它就会成为高度可定制和功能强大的产品。

    优点:

    • 极大的灵活性和可扩展性。
    • 一些插件允许在应用程序运行时添加。
    • 良好的便携性。
    • 易于部署。
    • 能够快速响应不断变化的环境。
    • 插件模块可以单独进行测试。
    • 高性能,因为你可以自定义和简化应用程序以仅包括所需的那些功能。

    应用场景:

    • 从不同来源获取数据,转换数据并将其输出到不同地方的应用程序。
    • 工作流应用程序。
    • 任务类应用程序。

    微服务模式(Microservices Pattern)

    当你采用微服务模式时,实际上就是在编写多个可以协同工作的服务进程。其中每个微服务都有自己的职责,团队可以独立于其他微服务进行开发。这些微服务之间唯一的依赖就是通信。当微服务彼此通信时,你必须确保它们之间发送的消息能够向后兼容。

    优点:

    • 可以分别编写,维护和部署每个微服务。
    • 易于扩展,因为你可以仅扩展需要扩展的微服务。
    • 更新迭代应用程序的各个部分比较容易,因为它们较小,并且与其他部分的耦合较少。
    • 团队成员能快速响应且富有成效。
    • 高度可维护和可测试–微服务模式满足快速频繁的开发和部署。
    • 可独立部署,无需与其他团队协调即可部署其服务。

    应用场景:

    • 边界明确的企业数据中心。
    • 快速发展的业务。
    • 多部门协作的开发团队。

    基于空间的架构模式(Space-based Pattern)

    基于空间的架构模式,可以专门用于解决软件系统的伸缩性和并发性问题。

    对于用户访问量经常发生变化、偶尔出现高并发的应用程序,这是一种有用的软件架构模式。这种模式,通过消除中央数据库约束,并使用复制基于内存的数据网格来实现伸缩性。

    基于空间的架构模式旨在通过在多个服务器之间拆分处理和存储数据,来避免高负载下的软件系统功能崩溃。

    优点:

    • 能够快速响应不断变化的环境。
    • 尽管基于空间的架构模式通常不是分布式,但它们是动态的,并且基于云的复杂工具允许将应用程序轻松 “推送” 到服务器,从而简化了部署。
    • 通过内存中的数据访问和此模式中内置的缓存机制可实现高性能。
    • 高可伸缩性来自于对集中式数据库的依赖很小或根本没有依赖的事实,因此提高了可伸缩性。

    应用场景:

    • 数据量大的应用程序,例如:用户日志。
    • 低价值数据,偶尔可能丢失而不会造成严重后果。
    • 社交类的应用程序。

    CS 模式(Client-server pattern)

    这种模式由两部分组成:服务器和多个客户端。服务器将向多个客户端提供服务。客户端从服务器请求服务,服务器向这些客户端提供相关服务。此外,服务器继续侦听客户端请求。

    应用场景:

    • 电子邮件、文档共享和银行等在线应用程序。
    • 基于 IPC 的应用程序。

    在这里插入图片描述

    主从模式(Master-slave pattern)

    这种模式由两部分组成:主节点和从节点。主节点将工作分配给相同的从节点,并根据从节点返回的结果计算最终结果。

    应用场景:

    • 在数据库复制中,主数据库被视为权威源数据库,从数据库与之同步。
    • 通过总线连接到计算机系统(主驱动器和从驱动器)的外围设备。
    • 进程内的多线程应用。

    在这里插入图片描述

    管道-过滤器模式(Pipe-filter pattern)

    这种模式可用于构造生成和处理数据流的系统,每个处理步骤都包含一个过滤器组件。要处理的数据通过管道传递,这些管道可用于缓冲或同步目的。

    应用场景:

    • 编译器。连续过滤器执行词法分析、词法解析、语义分析和代码生成。
    • 生物信息学的工作流。
    • 工具链式的应用程序。
    • 网络数据面处理软件。

    在这里插入图片描述

    代理模式(Broker pattern)

    这种模式通过解耦组件来构造分布式系统,这些组件可以通过远程服务调用彼此交互,代理组件负责协调组件之间的通信。

    服务器向代理发布功能(服务和特征),客户端向代理请求服务,然后代理将客户端重定向到合适的服务。

    注意:Broker,Agent,Proxy 以及 Delegate 之间的的区别。

    应用场景:

    • 消息代理软件,例如:Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss 消息传递。
    • 网络传输中的代理软件。

    在这里插入图片描述

    P2P 模式(Peer-to-peer pattern)

    在这种模式中,每个组件都称为对等节点。对等节点既可以作为客户机(从其他对等节点请求服务),也可以作为服务器(向其他对等节点提供服务)。对等节点可以充当单个客户机或服务器,也可以同时充当客户机和服务器,并且可以随着时间变化动态地更改角色。

    使用场景:

    • 文件共享网络,例如:Gnutella 和 G2 等。
    • 多媒体协议,如:P2PTV 和 PDTP。

    在这里插入图片描述

    MVC 模式(Model-view-controller pattern)

    MVC 模式将一个交互应用程序分为三个部分:

    1. 模型:包含核心功能和数据。
    2. 视图:向用户显示信息(可以定义多个视图)。
    3. 控制器:处理来自用户的输入。

    这样做是为了将信息的内部表示、信息呈现给用户的方式、接受用户输入的方式分离开来。这种模式解耦组件并允许有效的代码重用。

    应用场景:

    • 一般的 Web 应用程序,例如:Django 和 Rails 等框架。
    • 一般的 GUI 应用程序。

    在这里插入图片描述

    黑板模式(Blackboard pattern)

    这种模式对于没有确定解决方案策略的问题非常有用。

    黑板图案由三个主要部分组成:

    1. 黑板:一个结构化的全局内存,包含来自解决方案空间的对象。
    2. 知识源:具有自己表示形式的专门化模块。
    3. 控制组件:选择、配置和执行模块。

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

    应用场景:

    • 语音识别。
    • 车辆识别及追踪。
    • 蛋白质结构识别。
    • 声纳信号的解释。

    在这里插入图片描述

    解释器模式(Interpreter pattern)

    这种模式用于设计一个解释专用语言编写的程序组件,它主要指定如何评估每一行程序,即用特定语言编写的句子或表达式。其基本思想是语言的每个符号都有一个类。

    应用场景:

    • 数据库查询语言,如:SQL。
    • 用于描述通信协议的语言。

    在这里插入图片描述

    展开全文
  • 软件架构模式概述

    千次阅读 2016-09-17 12:15:20
    软件架构模式概述

    O'Reilly出版了一本免费的电子书《Software Architecture Patterns》(PDF),将目前流行的几种架构做了详细的介绍和对比,除了传统的分层架构,其他架构相当的前沿.这本书内容精简,非常值得一读,是软件架构非常好的入门书籍.这些文章是我阅读这本书后整理的笔记.

    对于开发人员来说,不进行正式的架构设计就直接开发编码再普通不过.在工作上经常遇到这样的情况.没有一个明确的,定义良好的架构,大多数开发人员和架构师会采用传统的分层架构模式(也称为N层架构),将模块源码分隔成若干个包(package)进行分层.不幸的是,这种做法经常导致的结果是无组织的源码集合,各个模块缺乏明确的角色,责任和关系.这通常被称为大泥球(big ball of mud)反模式架构.

    缺少架构的程序通常是紧密耦合,脆弱,难以改变的,没有头绪.如果不能理解系统的模块和组件之间的内部工作原理,很难确定程序的架构特征.

    关于部署和维护的问题都很难回答:架构的规模如何?程序的性能特征如何?程序容易修改吗?程序的部署模型是怎么样?程序的响应如何?

    架构模式可以帮助你定义程序的基本特征和行为.例如一些架构模式很自然让程序成为大规模(scalable)的程序,有些模式让程序变得灵巧敏捷(agile).了解这些架构的特征,优点和缺点,你就可以根据你特定的业务需求和目标选择一种合适的架构模式.

    作为一个设计师,你需要解释自己选择的架构模式,尤其是在选择一个特别的体系架构模式,O'Reilly的Software Architecture Patterns》提供了充足的信息来为你的架构选择提供证明.


    展开全文
  • 五大主流软件架构模式

    千次阅读 2020-06-23 13:52:41
    首先,什么是软件架构模式? 架构模式是那些由软件架构师通过持续实践,进而总结出的、过往已验证的、优秀设计架构。它们往往能够被重复地使用到其他项目或领域之中。更具体地说,架构模式是需要在实践中反复发掘的...
  • 程序员必知的几种软件架构模式

    千次阅读 多人点赞 2020-10-27 14:11:45
    程序员必知的几种软件架构模式前序分层架构模式多层模式管道 - 过滤器架构客户端 - 服务器架构模型 - 视图 - 控制器架构(MVC)事件驱动架构微服务架构 前序 架构模式是对给定上下文的软件架构中常见问题的一种通用...
  • 软件架构模式的种类

    千次阅读 2016-03-02 14:41:59
    软件架构模式的种类 在做软件架构设计时,根据不同的抽象层次可分为三种不同层次的模式:架构模式(Architectural Pattern)、设计模式(Design Pattern)、代码模式(Coding Pattern)。 · 架构模式是一个系统的高...
  • 软件架构模式之分层架构

    千次阅读 2015-04-21 18:06:14
    本章内容出自《软件架构模式》第一章,该书由 开发技术前线 项目组成员翻译,更多内容请访问 《软件架构模式》中文版pdf 。 简介 对程序员来说很常见一种情况是在没有合理的程序架构时就开始编程,没有一个...
  • 十种常用的软件架构模式

    千次阅读 2018-05-19 21:46:23
    常用的软件架构模式 1、分层模式——————-(Layered pattern) 2、客户端/服务器模式 —–(Client-Server pattern) 3、主/从模式 —————–(Master-Slave pattern) 4、管道/过滤器模式 ——–(Pipe-Filter ...
  • 10 个常用的软件架构模式

    千次阅读 2018-05-26 16:16:16
    因此在将软件架构应用于设计之前,必需要了解常用的架构模式。什么是架构模式?Wikipedia 的解释:在软件架构中,架构模式是对特定环境下常见问题的通用且可重用的解决方案。架构模式与软件设计模式很相似,但架构...
  • 软件架构模式基本概念及三者区别

    千次阅读 2016-10-26 16:51:06
    软件架构模式基本概念及三者区别 上次无意种读到这篇文章,个人觉得说得比较全面,就此记录下。原文地址:...
  • 调度器学习笔记二:软件架构模式

    千次阅读 2016-12-06 09:24:02
    软件架构模式 本文是我在阅读O'Reilly免费的电子书 Software Architecture Patterns过程中做的笔记。 首先这本书非常新,2015年3月30号订正后发布。其次将目前流行的几种架构详细进行了剖析和比较
  • 软件架构模式-事件驱动

    千次阅读 2017-03-11 22:22:20
    没有进行架构设计的应用程序通常是紧耦合的、玻璃心,难以改变。没有头绪。如果不理解应用的各个组件的内部工作方式的话...例如一些架构模式很自然让程序成为大规模(scalable)的程序。有些模式让程序变得灵巧敏捷(agil
  • 软件架构模式和设计模式

    千次阅读 2012-09-29 09:38:32
     软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。 ...
  • 10种常见的软件架构模式

    千次阅读 2018-06-13 18:25:06
    Tips原文作者:Vijini Mallawaarachchi原文地址:10 Common Software Architectural Patterns in a nutshell有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须...什么是架构模式?根据维基...
  • 概述10种常见软件架构模式

    万次阅读 多人点赞 2018-03-16 21:16:15
    架构模式是在给定上下文的软件架构中,针对常发生问题的一种通用、复用的解决方案。架构模式类似于软件设计模式,但是范畴更广。  本文中,我将简要的阐述如下10中常见架构模式的应用和优缺点。  1. 分层模式  2....
  • 软件架构模式和设计模式(书摘)

    千次阅读 2011-03-02 14:15:00
     软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。 ...
  • 我理解的软件 架构模式,MVC和分层

    千次阅读 2016-12-03 00:22:11
    最了解的软件架构模式就是分层和MVC和插件 为什么要分层? 分层就是为了分类,每一个层都有自己的职责。 东西多了就自然而然分层,物以类聚。 建个小屋是不需要分层的,房子高了才需要分层。每...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 387,486
精华内容 154,994
关键字:

软件架构模式