设计模式和架构模式有啥区别?

Posted

技术标签:

【中文标题】设计模式和架构模式有啥区别?【英文标题】:What's the difference between design patterns and architectural patterns?设计模式和架构模式有什么区别? 【发布时间】:2011-05-13 16:37:42 【问题描述】:

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

创意 结构 行为

但是当我们创建软件架构时,我们会考虑 MVP、MVC 或 MVVM。

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

所以我的问题是:设计模式是产品的全部结构吗?

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

如果不是,那么三类模式中的MVP、MVC和MVVM在哪里?软件的设计和架构有什么区别?

【问题讨论】:

已经讨论过:***.com/a/46419722/3649347 查看此设计模式和架构模式资源列表github.com/DovAmir/awesome-design-patterns 【参考方案1】:

如果我说得很简单

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

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

【讨论】:

【参考方案2】:

这需要详细的解释,但我会尽我所知尝试勾勒出不同之处。

模式是您在程序中发现的共同点。它使我们能够解构大型复杂结构并使用简单的部件进行构建。它为一类问题提供了一个通用的解决方案。

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

一个模式可以出现在非常不同的层次上。见Fractals。快速排序、合并排序都是按顺序组织一组元素的算法模式。

对于最简单的视图:

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

惯用语是特定于范式和特定于语言的编程技术,用于填充低级细节。

设计模式通常与代码级共性相关联。它为改进和构建更小的子系统提供了各种方案。它通常受编程语言的影响。由于language paradigms,一些模式变得微不足道。 设计模式是一种中等规模的策略,它充实了实体的一些结构和行为及其关系。

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

模式是如何获得的? 通过:

    重复使用, 分类 最后进行抽象以提炼共性。

如果您遵循上述想法。您将看到 Singleton 是一种“设计模式”,而 MVC 是一种处理关注点分离的“架构”模式。

尝试阅读:

    http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) http://en.wikipedia.org/wiki/Design_pattern http://en.wikipedia.org/wiki/Anti-pattern

【讨论】:

做得很好,很详细。现在我只希望每个人都能使用你在这里提出的不同的术语。我可以把你的答案印在我们营销部门的咖啡机上方的墙上吗?也许有一天他们会明白的。 ;-) @ofi:谢谢!语言结构的使用既可以误导我们,也可以指导我们。这是我觉得非常强大的东西。 +3 将我们从面试问题中拯救出来 :) 好答案,谢谢!!正如@ofi 所说,我将把它打印出来并钉在设计团队的墙上。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于设计模式和架构模式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Android真的推荐用MVI模式?MVI和MVVM有啥区别?

DAO 和存储库模式有啥区别?

“::”和“sys”模式有啥区别?

Oracle 和 Microsoft 架构之间有啥区别?

关系数据库中的目录和模式有啥区别?

多线程和多进程模式有啥区别