- 1. 百科
- 2. 主要分类
- 2.1. ADR
- 2.2. Active Record
- 2.3. Broker
- 2.4. 主从式架构
- 2.5. cbd
- 2.6. DAO
- 2.7. DDD
- 2.8. Data transfer object
- 2.9. Front controller
- 2.10. Identity map
- 2.11. Interceptor
- 2.12. 控制反转(IoC)
- 2.13. 模型-视图-控制器(MVC)
- 2.14. 微服务(Microservices)
- 2.15. MVP
- 2.16. 单体式应用程序
- 2.17. 多层架构
- 2.18. Naked objects
- 2.19. 对等式网络(P2P)
- 2.20. 发布/订阅
- 2.21. 表现层状态转换(REST)
- 2.22. 面向服务的体系结构(SOA)
- 2.23. Specification pattern
- 2.24. 线程局部存储
- 3. 📖参看
- 4. ※参考和引用
- 5. 🔗外部链接
架构模式(
architectural pattern
) 是 软件架构中 在给定环境下,针对常遇到的问题的、通用 且 可重用的 解决方案。类似于 软件设计模式🖇 但覆盖范围更广,致力于软件工程中 不同问题,如 计算机硬件性能限制、高可用性、业务风险极小化。一些架构模式 会透过软件框架 实现。软件工程中的“模式” 是源自于 建筑中的类似概念,例如 克里斯托佛·亚历山大 在1977年的《建筑模式语言》一书,探讨 在建筑中 会出现的模式,之后 也在软件工程中 使用此一概念。后来 Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns - Elements of Reusable Object-Oriented Software) 一书,设计模式的概念 也广泛地用在 软件工程中。
👆←🗎[1]
百科
例子
子领域 | 架构模式 | 软件设计模式 | 解决方案模式 | 相关模式 |
---|---|---|---|---|
数据集成/面向服务的架构(SOA) |
|
|||
|
||||
|
|
|||
数据架构 |
|
|
||
分析与商业智能 |
|
|
||
主数据管理 |
|
|
|
|
数据建模 |
|
|||
人工智能 |
|
|
一些额外的架构模式例子:
- 黑板 (设计模式)
- Broker模式
- 事件驱动架构
- 隐式调用
- 分层 (面向对象设计)
- 微服务
- 模型-视图-控制器(MVC), 表示-抽象-控制, Model-view-presenter, 模型-视图-视图模型
- 实体-组件-系统
- 多层架构 (通常为3层或n层)
- 裸对象
- 操作型数据存储 (ODS)
- 点对点网络
- 管线与过滤器架构
- 面向服务的架构(SOA)
- 基于空间的架构
参见
主要分类
ADR
Active Record
Broker
主从式架构
cbd
DAO
DDD
Data transfer object
Front controller
Identity map
Interceptor
控制反转(IoC
)
控制反转(英语:Inversion of Control,缩写为
IoC
),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI
),还有一种方式叫“依赖查找”(Dependency Lookup)。
模型-视图-控制器(MVC
)
MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式透过对复杂度的简化,使程序结构更加直观。软件系统透过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以依据自身的专长分组:
- 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
- 视图(View) - 界面设计人员进行图形界面设计。
- 控制器(Controller)- 负责转发请求,对请求进行处理。
微服务(Microservices)
微服务(英语:Microservices)是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic)的API集相互通信。
微服务的起源是由 Peter Rodgers 博士于 2005 年度云计算博览会提出的微 Web 服务(Micro-Web-Service)开始,Juval Löwy 则是与他有类似的前导想法,将类别变成细粒服务(granular services),以作为微软下一阶段的软件架构,其核心想法是让服务是由类似 Unix 管道的访问方式使用,而且复杂的服务背后是使用简单 URI 来开放接口,任何服务,任何细粒都能被开放(exposed)。这个设计在 HP 的实验室被实现,具有改变复杂软件系统的强大力量。
2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。
MVP
Model-view-presenter,简称MVP,是电脑软件设计工程中一种对针对MVC模式,再审议后所延伸提出的一种软件设计模式。
单体式应用程序
单体式应用程序(英语:Monolithic application)是一种软件设计结构,这不一定要是一种“应用程序”,因为这种概念也能够应用在网络服务上。一个单体式应用程序里面有许多的逻辑、服务(如:使用者服务、文章服务、留言服务),并且都有密不可分的关系。一旦其中一个服务不可用时,就会造成另一个服务也无法使用,因此也常被拿来当作微服务结构的对比,因为微服务独立、自主,并不会有像单体式应用程序这样的问题。
在程式进行时,单体式应用程序通常会循序执行,异步执行的时机较少(不是绝对的)。像是部分应用程序中在安装画面时可能导致界面卡死,按下“取消”按钮毫无反应,就是因为以非异步执行所产生的缘故。
- 单体式应用程序的结构规划十分简洁,因为服务与服务之间可以直接有所牵连,如:文章服务可以直接呼叫使用者服务。在这方面并没有太多的忌讳,所以开发时程在起步时也能够大幅减少。
由于单体式应用程序就像一个大型容器一样,里面摆置了许多服务,且他们都是密不可分的,这导致应用程序在扩展时必须以“应用程序”为单位。
这意味着当里面有个服务特别吃重(负载过高)时,并不能够单独扩展该服务,必须扩展整个应用程序,这可能导致额外的资源浪费。
此外,单体式应用程序由于服务之间的紧密度、相依性过高,这将导致测试、升级有所困难,且开发曲线有可能会在后期大幅度地上升,令开发不易。相较之下微服务结构能够解决这个问题。
多层架构
在软件工程中,多层架构是一种客户端/服务器端架构。在该架构中,表现功能、应用处理和数据管理功能物理分离。最常使用的多层架构是三层架构。
多层架构提供了一种模型,使得开发者可以建立方便扩展和复用的应用。通过将应用分成多层,开发者拥有修改或增加一个特定层的选择,而不是重写整个应用。一个三层架构通常由表现层,业务逻辑层和数据存储层组成。
Naked objects
对等式网络(P2P
)
对等式网络(英语:peer-to-peer, 简称
P2P
),又称 点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。与 有中心服务器的中央网络系统 不同,对等网络的每个用户端 既是一个节点,也有服务器的功能,任何一个节点 无法直接找到其他节点,必须依靠其户群 进行信息交流。
P2P
节点 能遍布整个互联网,也给包括开发者在内的任何人、组织或政府 带来监控难题。P2P
在网络隐私要求高和文件共享领域中,得到了 广泛的应用。使用一般型P2P
技术的网络系统 有 比特币、Gnutella 或 自由网等。另外,P2P
技术 也被使用在 类似 VoIP 等实时媒体业务的数据通信中。有些网络(如 Napster、OpenNAP、IRC @find)包括搜索的一些功能,也使用 客户端-服务器 结构,而 使用P2P
结构 来实现另外一些功能。这种网络设计模型 不同于 客户端-服务器 模型,在 客户端-服务器 模型中 通信 通常来往于一个中央服务器。
发布/订阅
在软件架构中,发布-订阅 是一种 消息范式,消息的发送者(称为 发布者) 不会将消息 直接发送给特定的接收者(称为 订阅者)。而是 将发布的消息 分为不同的类别,无需了解 哪些订阅者(如果有的话)可能存在。同样的,订阅者 可以表达 对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解 哪些发布者(如果有的话)存在。
发布/订阅 是 消息队列范式 的兄弟,通常是 更大的面向消息中间件系统 的一部分。大多数消息系统 在 API 中 同时支持 消息队列模型 和 发布/订阅 模型,例如 Java 消息服务(
JMS
)。这种模式 提供了 更大的网络可扩展性 和 更动态的网络拓扑,同时 也降低了 对发布者和发布数据的结构修改 的灵活性。
表现层状态转换(REST
)
表现层状态转换(英语:Representational State Transfer,缩写:
REST
)是 Roy Thomas Fielding 博士 于2000年 在他的博士论文中 提出来的一种 万维网软件架构风格,目的是 便于不同软件/程序 在网络(例如 互联网)中 互相传递信息。表现层状态转换 是 根基于超文本传输协议(HTTP
)之上 而确定的一组 约束和属性,是一种 设计 提供万维网络服务 的软件构建风格。符合或兼容于 这种架构风格(简称为REST
或RESTful
) 的网络服务,允许客户端 发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集 一致化。因此 表现层状态转换 提供了 在互联网络的计算系统之间,彼此资源可交互使用的协作性质(interoperability)。相对于其它种类的网络服务,例如SOAP
服务,则是 以本身所定义的操作集,来访问网络上的资源。目前 在三种主流的 Web 服务实现方案中,因为
REST
模式与复杂的SOAP
和XML-RPC
相比 更加简洁,越来越多的 Web 服务 开始采用REST
风格 设计和实现。例如,Amazon.com
提供接近REST
风格的 Web 服务 运行图书查询;雅虎提供的 Web 服务 也是REST
风格的。
面向服务的体系结构(SOA
)
面向服务的体系结构(英语:
service-oriented architecture
) 并不特指 一种技术,而是一种 分布式运算的软件设计方法。软件的部分组件(调用者),可以透过网络上的通用协议 调用另一个应用软件组件 运行、运作,让调用者 获得服务。SOA
原则上 采用开放标准,与软件资源进行交互并采用表示的标准方式。因此应能跨越厂商、产品与技术。一项服务应视为一个独立的功能单元,可以远程访问并独立运行与更新,例如在线查询信用卡账单。
SOA
中的一项服务应有以下四个特性:
- 针对某特定要求的输出,该服务就是运作一项商业逻辑
- 具有完备的特性(self-contained)
- 消费者并不需要了解此服务的运作过程
- 可能由底层其他服务组成
Specification pattern
In computer programming, the specification pattern is a particular software design pattern, whereby business rules can be recombined by chaining the business rules together using boolean logic. The pattern is frequently used in the context of domain-driven design.
A specification pattern outlines a business rule that is combinable with other business rules. In this pattern, a unit of business logic inherits its functionality from the abstract aggregate Composite Specification class. The Composite Specification class has one function called IsSatisfiedBy that returns a boolean value. After instantiation, the specification is "chained" with other specifications, making new specifications easily maintainable, yet highly customizable business logic. Furthermore, upon instantiation the business logic may, through method invocation or inversion of control, have its state altered in order to become a delegate of other classes such as a persistence repository.
As a consequence of performing runtime composition of high-level business/domain logic, the Specification pattern is a convenient tool for converting ad-hoc user search criteria into low level logic to be processed by repositories.
线程局部存储
线程局部存储 (
TLS
) 是一种存储持续期(storage duration),对象的存储 是 在线程开始时 分配,线程结束时 回收,每个线程 有 该对象自己的实例。这种对象的链接性(linkage) 可以是静态的 也可是外部的。
TLS
的一个例子 是 用全局变量errno
表示 错误号。这可能 在多线程并发时 产生同步错误。线程局部存储的errno
是个解决办法。
📖参看
- calc() - CSS(层叠样式表) | MDN
- fit-content() - CSS(层叠样式表) | MDN
- 【★】【GFM】GitHub Flavored Markdown Spec - github.github.com
- HTML Color Picker
- 「本站_标准颜色」 ⤵
- 『 红 』
#CC0000
- 『 粉 』
#FF6699
- 『 橙 』
#FCC000
- 『 绿 』
#6AA84F
- 『 蓝 』
#4343FF
- 『 紫 』
#9900FF
- 『 灰 』
#808080
- 『 红 』
- HTML中      等6种空白空格的区别_电脑小技巧_上网技巧_QQ地带
- Markdown 教程 | 菜鸟教程
- 👆 - 白色指向反手指数 表情符号: U+1F446 - Unicode 字符百科
- 📖 - 打开书 表情符号: U+1F4D6 - Unicode 字符百科
- 🔗 - 链接符号 表情符号: U+1F517 - Unicode 字符百科
- 🖇 - 链接回形针 表情符号: U+1F587 - Unicode 字符百科
- 🗎 - 文献: U+1F5CE - Unicode 字符百科
- ※ - 参考标志: U+203B - Unicode 字符百科
- ☌ - 关联: U+260C - Unicode 字符百科
- 🡅 - 向上重箭头: U+1F845 - Unicode 字符百科
- 🡆 - 向右重箭头: U+1F846 - Unicode 字符百科
- 🡇 - 向下重箭头: U+1F847 - Unicode 字符百科
- 🡄 - 向左重箭: U+1F844 - Unicode 字符百科
- ⤴ - 指向右侧然后向上弯曲的箭头 表情符号: U+2934 - Unicode 字符百科
- ⤵ - 指向右侧然后向下弯曲的箭头 表情符号: U+2935 cudarrr - Unicode 字符百科
- ⤶ - 指向下侧然后向左弯曲的箭头: U+2936 ldca - Unicode 字符百科
- ⤷ - 指向下侧然后向右弯曲的箭头: U+2937 rdca - Unicode 字符百科
- 🎵 - 快乐的音符 表情符号: U+1F3B5 - Unicode 字符百科
- ⇔ - 左右双箭头: U+21D4 hArr - Unicode 字符百科
- ⇒ - 向右双箭头: U+21D2 rArr - Unicode 字符百科
- — - Em 长划: U+2014 mdash - Unicode 字符百科
- 👍 - 竖起大拇指 表情符号: U+1F44D - Unicode 字符百科
- 标点符号 - 维基百科,自由的百科全书
- 连接号 - 维基百科,自由的百科全书