架构风格、架构模式和设计模式之间的区别

【架构风格、架构模式和设计模式之间的区别】许多软件专业人员认为架构样式和模式是相同的。令人遗憾的是, 一些软件开发人员不了解架构模式和设计模式之间的区别。在本文中, 我们将总结它们之间的差异。
根据MSDN, 架构样式和模式是相同的。但是怎么可能呢?样式一词的意思是:” 一种做事的方式” 而模式意味着:” 重复的装饰设计” 。但是, 这些定义显示了两个不同的方面。在软件工程中, 术语必须更清楚并描述特定的内容。那么, 术语之间有什么区别, 我们如何区分它们呢?
架构风格
架构风格显示了我们如何组织代码, 或者从10000英尺的直升机视图中系统看起来如何, 以显示我们系统设计的最高抽象水平。此外, 在构建系统的体系结构样式时, 我们关注于层和模块以及它们之间如何通信。
有多种类型的架构风格, 此外, 我们可以将它们混合并生成包含两种甚至更多种架构风格的混合风格的混合风格。以下是每个类别的架构风格和示例的列表:

  • 结构架构风格:例如分层, 管道和过滤器以及基于组件的样式。
  • 讯息风格:例如隐式调用, 异步消息传递和发布-订阅样式。
  • 分布式系统:例如面向服务, 对等样式, 对象请求代理和云计算样式。
  • 共享内存样式:例如基于角色, 黑板, 以数据库为中心的样式。
  • 自适应系统样式:例如微内核样式, 反射, 特定领域的语言样式。
架构图案
体系结构模式显示了如何使用解决方案来解决重复出现的问题。换句话说, 它反映了代码或组件之间如何交互。此外, 架构模式描述了我们系统的架构风格, 并为我们的架构风格中的问题提供了解决方案。就我个人而言, 我更喜欢将架构模式定义为一种实现我们的架构风格的方式。例如:如何以我们的架构风格分隔数据模块的UI?如何将第三方组件与我们的系统集成?我们的客户端-服务器体系结构中将有多少条轮胎?架构模式的示例是微服务, 消息总线, 服务请求者/使用者, MVC, MVVM, 微内核, n层, 域驱动设计和表示抽象控制。
设计模式
设计模式是累积的最佳实践和经验, 多年来, 软件专业人员使用它们来解决软件开发过程中遇到的一般问题, 即反复试验。 “ 四人帮” (GOF, 指的是Eric Gamma, Richard Helm, Ralf Johnson和John Vlissides)在1994年写了一本书, 题为” 设计模式-可重用的面向对象软件的元素” , 他们认为设计模式是基于面向对象设计的两个主要原则:
  • 开发为接口, 而不是实现。
  • 优先考虑对象组成而不是继承。
此外, 他们还提出设计模式集包含23个模式, 并分为三大类:
1.创作设计模式:
提供一种在隐藏创建逻辑的同时创建对象的方法。因此, 无需直接使用” New” 关键字实例化对象就可以完成对象创建, 从而可以灵活地决定为给定用例需要创建哪些对象。创新的设计模式是:
  • 抽象工厂模式:提供一个无需指定类即可创建对象的接口。
  • 单例模式:仅提供呼叫的单个实例以及对该实例的全局访问。
  • 生成器模式:将构造与制图表达分开, 并允许相同的构造创建多个制图表达。
  • 原型模式:创建副本而不影响性能和内存。因此, 重复对象是根据现有对象的骨架构建的。
2.结构模式:
与类和对象组成有关。结构设计模式为:
  • 适配器模式:它充当两个不兼容接口之间的桥梁, 并组成了它们的功能。
  • 桥接模式:提供了一种将抽象与其实现分离的方法。
  • 过滤模式:也称为标准模式, 它提供了一种使用不同标准过滤一组对象并通过逻辑操作以解耦的方式链接它们的方法。
  • 复合图案:提供一种以与单个对象相似的方式对待一组对象的方法。它根据树结构组成对象, 以表示部分以及整个层次结构
  • 装饰图案:允许在不更改其结构的情况下向现有对象添加新功能。
  • 外墙图案:提供一组接口的统一接口。它隐藏了系统的复杂性, 并为客户端提供了一个接口, 客户端可以使用该接口访问系统。
  • 跳线模式:减少创建的对象数量并减少内存占用并提高性能。它通过存储已有的同类对象来帮助重用它们, 并在找不到匹配的对象时创建一个新对象。
  • 代理模式:为另一个对象提供占位符以控制对其的访问。该对象具有原始对象, 以将其功能与外部世界连接。
3.行为模式:
行为模式与对象之间的通信有关。以下是行为模式的列表:
  • 责任模式:为请求创建接收方对象链。此模式根据请求的类型将请求的发送者和接收者解耦。
  • 命令模式:这是一种数据驱动的模式, 其中将请求作为命令包装在一个对象下, 然后传递给调用者对象。
  • 口译模式:提供一种评估语言语法或表达的方法。它涉及实现一个表达式接口, 该接口告诉你解释特定的上下文。此模式用于SQL解析, 符号处理引擎等。
  • 迭代器模式:提供了一种以顺序方式访问集合对象的元素的方式, 而无需知道其基础表示。
  • 中介者模式:用于减少多个对象或类之间的通信复杂性。它提供了一个介体类, 该介体类通常处理不同类之间的所有通信, 并通过松散耦合支持轻松维护代码。
  • 纪念图案:用于将对象的状态恢复到以前的状态。
  • 观察者模式:在对象之间存在一对多关系时使用, 例如, 如果修改了一个对象, 则将自动通知其从属对象。
  • 状态模式:用于根据类的状态更改类的行为。
  • 空对象模式:通过使用默认对象有助于避免空引用。
  • 策略模式:提供了一种在运行时更改类行为或其算法的方法。
  • 模板模式:抽象类公开定义的方式/模板来执行其方法。它的子类可以根据需要覆盖方法的实现, 但是调用的方式应与抽象类所定义的方式相同。
  • 访客模式:用于更改元素类的执行算法。
可以将设计模式的两个子集添加到设计模式的3个类别中:
  • J2EE模式:模式专门与表示层有关。这些模式由Sun Java Center标识。
  • 并发模式:例如:禁止, 连接, 锁定和线程池模式
底线:
架构风格是系统的10000架直升机视图。它以最高抽象级别显示了系统设计。它还显示了应用程序的高级模块以及这些模块如何交互。另一方面, 体系结构模式在水平和垂直方向上对系统实现都具有巨大的影响。最后, 设计模式用于解决软件实施过程中的局部问题。而且, 由于设计模式更关注代码实现的特定部分, 例如初始化对象和对象之间的通信, 因此与体系结构模式相比, 对代码的影响较小。

    推荐阅读