设计模式和体系结构模式之间的区别是什么?

当我们在互联网上阅读 设计模式时,我们注意到有三种类型:

  • 创造性的
  • 结构上
  • 行为

但是当我们创建一个软件的体系结构时,我们会考虑 MVP、 MVC 或 MVVM。

例如,在创建模式中,我发现了 单例模式,但是我也在我的 MPV 中使用了单例模式。

所以我的问题是: 设计模式是一个产品的整体结构吗?

  • 如果是,那么单例模式如何成为一种设计模式?因为我可以在应用程序的任何地方使用它。基本上,它仅限于在内存中一次创建一个实例,但是这个概念不是定义了软件是如何设计的吗?

  • 如果没有,那么 MVP、 MVC 和 MVVM 在这三类模式中的位置在哪里?软件设计和体系结构之间的区别是什么?

84975 次浏览

主要是语言的问题。根据我的经验,设计和建筑之间的界限,就软件而言,是一条宽阔的河流,它的宽度是由水位决定的,而水位又主要受到营销季节的影响。一般来说,“设计”这个术语被用来描述最终用户所认可的软件产品行为的一个重要方面,而“体系结构”则代表软件的技术结构,即组件、库、协议和任何它需要完成设计的东西。“设计模式”有两个角色: 第一,它们被视为解决一类(或多或少)标准问题的最佳实践,而不是产品; 第二,它们帮助开发人员进行沟通。继续你的 Singleton 例子,它允许我们通过使用这个词来了解机制是什么,而不是每次都解释,我们通过使用指定的数据空间(变量或其他)来创建一个单独的实例,这个数据空间是以受控的方式设置的,并且保证是唯一的一个,因为我们保护了类的构造函数等等。所以恕我直言,对你的问题的简短回答是: 这取决于谁在说话。这说得通吗?

它需要一个详细的解释,但我会尽我所知尽力勾勒出差异。

模式 是您在程序中找到的提炼出来的公共性。它使我们能够解构一个大型复杂的结构,并使用简单的部件进行构建。它为一类问题提供了通用的解决方案。

一个大型的复杂软件在不同的层次上经历了一系列的解构。在大的层次上,体系结构模式是工具。在较小的层次上,设计模式是工具,而在实现层次上,编程范例是工具。

模式可以发生在非常不同的层次。参见 分形。快速排序、合并排序都是按顺序组织一组元素的算法模式。

一个最简单的观点是:

  • 编程范例 -特定于编程语言
  • 设计模式 -解决软件构建中反复出现的问题
  • 架构模式 -软件系统的基本结构组织

习语 是特定于范例和特定于语言的编程技术,它们填充了底层细节。

设计模式 通常与代码级的共性相关联。它提供了各种精炼和构建较小子系统的方案。它通常受编程语言的影响。有些模式由于 语言范例而变得微不足道。 设计模式是一种中等规模的策略,它充实了一些实体的结构和行为以及它们之间的关系。

建筑模式被认为是比设计模式更高层次的共性。 架构模式是涉及大规模组件、系统的全局属性和机制的高级策略。

如何获得模式? 通过:

  1. 再利用,
  2. 分类
  3. 最后抽象化,提炼出共性。

如果你跟随了上面的想法。你会看到 Singleton 是一种“设计模式”,而 MVC 是处理关注点分离的“架构”模式之一。

继续读下去:

  1. Http://en.wikipedia.org/wiki/architectural_pattern_(computer_science)
  2. Http://en.wikipedia.org/wiki/design_pattern
  3. Http://en.wikipedia.org/wiki/anti-pattern

设计模式是用于解决技术问题的众所周知的模式,它已经被多次证明。 设计模式是创建可重用的面向对象软件的常见设计结构和实践。设计模式的例子有工厂模式、单件模式、立面模式、状态模式等。设计模式可用于解决整个应用程序中的较小问题,并且比整个体系结构更容易注入、更改和添加

体系结构模式是解决软件应用程序体系结构问题的众所周知的模式。软件应用程序体系结构是定义满足所有技术和操作需求的结构化解决方案的过程。 应用程序的体系结构是代码的整体“组织”。不同架构的例子可能是 MVC、 MVVM、 MVP、 n 层(即 UI-BLL-DAL)等。架构通常需要预先确定,而且一旦构建了应用程序,通常很难进行更改。

架构元素倾向于类或模块的集合,通常表示为框。关于体系结构的图表代表向下看的最高层次,而类图则处于最原子的层次。体系结构模式的目的是理解系统的主要部分如何组合在一起,消息和数据如何通过系统流动,以及其他结构性问题。 体系结构模式利用各种组件类型,每种组件类型通常由相继较小的模块组成。每个组件在体系结构中都有一个职责 设计模式是用于较小应用程序粒子的低级或类级设计模式。

了解更多信息: Https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns

设计模式 不同于架构模式,它们更加本地化,对代码基础的影响更小,它们影响代码基础的特定部分,例如:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

架构模式对代码基础有广泛的影响,最常见的影响是横向地影响整个应用程序(即。如何在一个层内部结构代码)或垂直(即。如何处理一个请求从外层进入内层和返回)。体系结构模式的例子: 模型-视图-控制器,模型-视图-视图模型

如果我说得很简单

Architecture 管理应用程序中的数据流,即数据如何在应用程序中的各个组件之间流动

设计模式 处理您应用于将一个大单元分解为可管理的块的任何破坏