当我们在互联网上阅读设计模式时,我们注意到有3个类别:
但是当我们创建软件架构时,我们会考虑MVP,MVC或MVVM。
例如,在创作模式中,我找到了单例模式,但我也在我的MPV中使用了单例。
所以我的问题是:设计模式是否超过了产品的所有结构?
如果是,那么单身人士如何成为一种设计模式?因为我可以在应用程序的任何地方使用它。基本上,它仅限于在内存中一次创建一个实例,但这个概念不能定义软件的设计方式吗?
如果没有,那么MVP,MVC和MVVM在哪三种模式中?软件的设计和架构有什么区别?
答案 0 :(得分:154)
这需要详细的解释,但我会尝试根据我的知识勾勒出差异。
模式是您在程序中找到的提升的通用性。它允许我们解构大型复杂结构并使用简单的部件构建。它为一类问题提供了一般解决方案。
大型复杂软件经历了不同层次的一系列解构。在很大程度上,架构模式是工具。在较小的层面上,设计模式是工具,在实现层面,编程范例是工具。
模式可以以非常不同的级别发生。见Fractals。快速排序,合并排序是用于按顺序组织一组元素的所有算法模式。
最简单的观点:
Programming paradigms Specific to programming language
......................
Design patterns Solves reoccurring problems in software construction
......................
Architectural patterns Fundamental structural organization for software systems
......................
成语是范式特定的,特定于语言的编程技术,可以填充低级细节。
设计模式通常与代码级别的共性相关联。它提供了各种方案来改进和构建较小的子系统。它通常受编程语言的影响。由于language paradigms,一些模式显得微不足道。 设计模式是中等规模的策略,可以充实实体及其关系的一些结构和行为。
虽然架构模式被视为比设计模式更高层次的共性。 架构模式是涉及大规模组件,系统的全局属性和机制的高级策略。
如何获得模式? 通过:
如果你遵循了上面的想法。您将看到Singleton是一种“设计模式”,而MVC是处理关注点分离的“架构”模式之一。
尝试阅读:
答案 1 :(得分:8)
设计模式是众所周知的模式,用于以多次证明自己的方式解决技术问题。 设计模式是常见的设计结构和实践,可用于创建可重用的面向对象软件。设计模式示例包括工厂模式,单例,外观,状态等。设计模式可用于解决整个应用程序中的较小问题,并且比整体架构更容易注入,更改和添加
架构模式是用于解决软件应用程序架构问题的众所周知的模式。软件应用程序体系结构是定义满足所有技术和操作要求的结构化解决方案的过程。 应用程序的体系结构是代码的整体“组织”。不同体系结构的示例可能是MVC,MVVM,MVP,n层(即UI-BLL-DAL)等。通常需要预先确定体系结构,并且一旦构建应用程序,通常很难更改。
答案 2 :(得分:1)
建筑元素倾向于类或模块的集合,通常表示为框。关于体系结构的图表表示向下俯视的最高级别,而类图表处于最原子级别。架构模式的目的是了解系统的主要部分如何组合在一起,消息和数据如何流经系统以及其他结构问题。 架构模式使用各种组件类型,每个组件类型通常由相继较小的模块组成。每个组件都在架构中负有责任 对于较小的应用粒子,设计模式是低级或类级设计模式。
了解更多信息: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns
答案 3 :(得分:0)
嗯,主要部分是语言问题。根据我的经验,就软件而言,设计和建筑之间的界限是一条宽阔的河流,其宽度由水位引起,而水位又主要受营销季节的影响。通常,术语“设计”与最终用户认可的软件产品行为的强烈方面一起使用,而“架构”代表软件的技术结构,即。即组件,库,协议以及完成设计所需的任何东西。 “设计模式”有两个作用:第一,它们被视为解决一类(或多或少)标准问题的最佳实践,而不是产生;第二,他们帮助开发人员进行沟通。继续使用Singleton的例子,它允许我们通过使用单词而不是每次解释我们通过使用设置的指定数据空间(变量或其他)来创建单个实例来了解机制的内容。一个受控的方式,并保证是唯一的,因为我们保护班级的建设者等。所以恕我直言,你的问题的简短答案是:这取决于谁在说话。这有什么意义吗?
答案 4 :(得分: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
答案 5 :(得分:0)
如果我说得非常简单
架构管理应用中的数据流,即数据如何在应用中的各个组件之间流动
设计模式处理您应用的任何破坏,以将一个大单元分成可管理的块