【问题标题】:What's the difference between Architectural Patterns and Architectural Styles?建筑模式和建筑风格有什么区别?
【发布时间】:2011-04-26 21:03:39
【问题描述】:

软件架构 - 基础、理论和实践中,我可以找到两者的定义。问题是我不明白他们每个人用简单的英语意味着什么:

架构模式

架构模式是架构设计决策的命名集合,适用于重复出现的设计问题,参数化以说明出现该问题的不同软件开发环境。

建筑风格

架构风格是架构设计决策的命名集合,这些决策 (1) 适用于给定的开发环境,(2) 约束特定于该环境中特定系统的架构设计决策,以及 (3) 引出有益的每个结果系统的品质。

每一个是什么意思,它们之间有什么区别?

【问题讨论】:

  • 这个问题应该迁移到软件工程网站

标签: architecture architectural-patterns


【解决方案1】:

架构风格是抽象的,即既不是技术也不是库的概念。

Category Architecture styles
Communication SOA, ROA, Message Bus
Deployment Client/Server
Domain Domain Driven Design,Monolithic, Mocroservice
Structure Component-Based, Object-Oriented, Layered, Plug-ins
Other Peer-to-peer, REST, Cloud computing, Internet of Things, Blockchain...

架构模式是具体的,即架构风格的实现。

  • 例如:3-tier、N-tier、MVC、Model View ViewModel、Publish-subscribe、Sensor-controller-actuator...

设计模式是针对架构级别软件设计中常见问题的通用可重用解决方案。

  • 例如:Factory、Singleton、Prototype。

类比:不同宗教的寺庙建筑风格:

【讨论】:

  • REST 真的是一种架构模式吗?还是沟通机制?
  • 这个答案只是混淆了很多东西。我想我在一些维基百科页面上看到了相同的信息。类别没有意义,因为所有提到的样式都属于它们。消息总线、Rest 只是模式的一部分。
【解决方案2】:

坦率地说,我一直认为这两个词是同义词!外行(相对而言)文学肯定如此对待它们。 参考MSDNWikipedia

但是,你的问题让我有点感兴趣,所以我做了更多的挖掘,坦率地说......除了引用 A Practical Guide to Enterprise Architecture (The Coad Series) 之外,我找不到太多,我引用了:

建筑风格(Base et al. 1997)和建筑模式(Buschmann et al. 1996)本质上是同义词。

基于更多googling,我认为这可能是区分两者的一种可能方式:

  • 架构风格是系统创建/工作方式的概念性方式。
  • 架构模式描述了在子系统或模块及其关系级别实现样式的解决方案。

架构模式设计模式有何不同,即适配器,观察者基本上取决于它们应用的粒度级别(我知道这不是问题的一部分,但它是相关的,我认为......)

【讨论】:

  • +1 - 我认为你是对的。模式定义得很好,因为建筑风格看起来有点模糊,也许有点高级。
  • 如果你有兴趣,我用我本学期在软件设计课程中学到的知识对这个话题做了一个新的回答。
【解决方案3】:

建筑风格

架构风格是代表应用程序子系统的更广泛组织的名称,并描绘了它的整体轮廓的想法。例如,SOAClient/ServerMessage Bus 等。

架构模式

架构模式是一般架构问题的可重用解决方案的名称,它给出了如何实现内部部分来解决它们的想法。例如,2-Tier3-TierN-TierMVCREST 等。

一种风格可以使用多种模式来解决多个问题。例如,客户端/服务器样式可以使用N-Tier模式或(和)MVC模式来分离其业务逻辑表示逻辑数据逻辑用于引入解决modifiabilitymaintainability问题的模块化。

【讨论】:

    【解决方案4】:

    架构风格以非常广泛的方式告诉我们如何组织我们的代码。它是最高级别的粒度,它指定层、应用程序的高级模块以及这些模块和层如何相互交互,以及它们之间的关系。架构风格示例:基于组件、SOA

    架构模式对代码库有广泛的影响,最常见的是水平(即如何在层内构建代码)或垂直(即如何将请求从外层处理到内层和背面)。架构模式示例:模型-视图-控制器、模型-视图-视图模型

    【讨论】:

      【解决方案5】:

      架构风格描述了一个由许多组件组成的系统。只有一种应用架构,您必须在任何地方应用一种架构风格,例如微服务、SOA 和事件驱动架构。

      架构模式描述单个组件内部的某些内容,不要尝试在任何地方应用相同的架构模式,如 CQRS 或 DDD。

      【讨论】:

        【解决方案6】:

        架构模式是一种解决反复出现的架构问题的方法。例如,MVC 解决了将 UI 与模型分离的问题。 Sensor-Controller-Actuator,是一种模式,可以帮助您解决面对多种输入感官的致动问题。

        另一方面,一种建筑风格只是一个反复出现的建筑设计的名称。与模式相反,它不存在“解决”问题。

        Pipe&filter 不能解决任何具体问题,它只是一种组织代码的方式。 Client/server, Main program & subroutine 和 Abstract Data Types / OO, 同理。

        另外,一个架构可以包含多种架构风格,而每种架构风格又可以使用多种架构模式。

        【讨论】:

        • 什么是循环架构设计?举个例子
        【解决方案7】:

        架构模式:上下文+问题->解决方案

        架构风格:架构模式的解决方案部分

        所以架构风格类似于架构模式的解决方案部分。它经常用于处理架构文档的书籍中,重点是解决方案,而不是上下文和问题是如何产生的。

        【讨论】:

          【解决方案8】:

          简单来说:

          • An architectural style

            是一个概念、理论(以及如何实现它取决于您)。它也可以应用于软件世界之外。

            例如:REST (Representational State Transfer) 是一种架构风格,它建立在使用当前“Web”基础的特定原则之上。

          • An architectural patterns

            描述软件系统(或模块)级别的解决方案。换句话说,它是如何相互作用的,例如视图与模型,模型与控制器。

          • A design patterns

            是一个核心级别的解决方案,它讨论类、函数以及逻辑的实际流动方式。

          【讨论】:

            【解决方案9】:

            架构模式——定义一组通用的元素类型及其 互动。架构模式的示例包括管道和过滤器, 模型-视图-控制器和反射。

            建筑风格——这个词是由 Garlan 和 Shaw 创造的,它是 系统组织的惯用模式。例如,客户端-服务器系统 是一种建筑风格。

            p.s : 许多原始的建筑风格已经 重新制定为模式。

            【讨论】:

            • 所以你是说管道和过滤器现在是模式?因为在我正在阅读的软件架构书中,明确将管道和过滤器列为一种风格。
            【解决方案10】:

            在我看来,模式和架构风格是封装设计专业知识的互补机制。建筑风格提供了构建块设计元素的集合、用于组成构建块的规则和约束,以及用于分析和操作在该风格中创建的设计的工具。 样式通常为在特定领域中构建广泛类别的架构提供指导和分析,而模式专注于解决给定样式(或可能是多种样式)内更小、更具体的问题。

            【讨论】:

              【解决方案11】:

              架构设计模式更针对特定领域,而架构样式更通用且可用于广泛的应用程序。由于这种架构模式需要更多的领域知识。

              【讨论】:

                【解决方案12】:

                对于架构模式,请考虑使用GoF 描述的特定方式来设置代码样式; Adapter、Strategy、Builder、Mediator等

                为建筑风格考虑整体系统;即,使用 MVC 进行演示,使用 DDD 对业务层进行建模,使用 WCF(如果您使用 .NET)进行互操作,使用 SOA 进行集成等。

                【讨论】:

                • 实际上,我认为您完全不同意这一点。我会在几分钟后发布详细答案。
                • Adapter、Strategy、Builder、Mediator 是设计模式而不是架构模式。不同的是,这些是针对软件架构不处理但软件设计处理的更细粒度的“如何”决策。
                猜你喜欢
                • 2016-07-15
                • 1970-01-01
                • 1970-01-01
                • 2010-10-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-30
                • 1970-01-01
                相关资源
                最近更新 更多