设计模式和建筑模式之间有什么区别?


119

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

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

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

例如,在创建模式中,我找到了单例模式,但我还在MPV中使用了单例。

所以我的问题是:设计模式是否涵盖了产品的所有结构?

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

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



2
请查看此设计模式和建筑模式资源列表github.com/DovAmir/awesome-design-patterns
dov.amir,2018年

Answers:


174

它需要详细的解释,但是我将尽我所能尝试绘制差异。

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

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

模式可以在非常不同的级别上发生。见分形。快速排序,合并排序都是用于按顺序组织一组元素的算法模式。

对于最简单的视图:

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

成语是范式特定和语言特定的编程技术,在低级别的细节填充。

设计模式通常与代码级通用性相关。它提供了各种方案来完善和构建较小的子系统。它通常受编程语言的影响。由于以下原因,一些模式变得微不足道语言范式,。设计模式是中等规模的策略,充实了实体的某些结构和行为及其关系。

建筑模式在比设计模式更高的层次上,被视为通用性。架构模式是涉及大型组件,系统的全局特性和机制的高级策略。

如何获得图案?通过:

  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/反模式

14
做得很好,精心制作。现在,我只希望每个人都能使用您在此处所用的不同术语。我可以在您的营销部咖啡机上方的墙上写下您的答案吗?也许他们会了解一天。;-)
ofi

@ofi:谢谢!语言构造的使用可能会误导我们并引导我们。我觉得这很强大。
pyfunc

+3可以帮助我们从面试问题中
解脱

好答案,谢谢!正如@ofi所说,我将打印并钉在设计团队的墙上。
滚动

11

设计模式是众所周知的用于以多种方式证明自己解决技术问题的模式。设计模式是创建可重用的面向对象软件的通用设计结构和实践。设计模式示例包括“工厂模式”,“单例”,“外观”,“状态”等。设计模式可用于解决整个应用程序中的较小问题,并且比整个体系结构更容易注入,更改和添加

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


1

建筑元素倾向于类或模块的集合,通常表示为盒子。有关体系结构的图表示向下的最高层,而类图则是最原子的层。架构模式的目的是了解系统的主要部分如何配合在一起,消息和数据如何流经系统以及其他结构性问题。架构模式利用各种组件类型,每种类型通常由连续较小的模块组成。在架构中,每个组件都有责任。设计模式是针对较小应用程序级别的低级或类级设计模式。

有关更多信息:https : //www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

好吧,主要是语言问题。根据我的经验,就软件而言,设计和体系结构之间的边界是一条宽阔的河,其宽度是由水位引起的,而水位又主要受营销季节的影响。通常,术语“设计”与最终用户认可的软件产品行为的重要方面一起使用,而“体系结构”代表软件的技术结构,即组件,库,协议以及实现软件所需的任何内容。设计。“设计模式”扮演两个角色:第一,它们被视为解决(或多或少)标准问题类别而非产品类别的最佳实践;第二,他们帮助开发人员进行交流。坚持以单例为例,它使我们仅使用单词就可以知道机制的含义,而不必每次都进行解释,而是通过使用以受控方式设置且保证为的指定数据空间(变量或其他)创建了一个实例。唯一的一个,因为我们保护了类的构造函数。所以恕我直言,对您的问题的简短回答是:它取决于谁在讲话。这有意义吗?


0

设计模式在范围上与体系结构模式不同,它们更加本地化,​​对代码库的影响较小,对代码库的特定部分产生影响,例如:

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?)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.