乐于分享
好东西不私藏

【架构设计】软件架构描述语言 ADL

【架构设计】软件架构描述语言 ADL

不止学什么,还要学为什么

说了架构是什么,那我们总得有个东西去描述架构吧?

要表达架构有什么东西吧?架构是如何一个结构吧?

就和建筑的图纸是一样滴

没错,就是 !

—— 架构描述语言 

—— Architecture Description Language

不过在此之前先说明,我们只要了解下是啥东西就好了

因为这玩意非常难用,学习门槛高,难以理解

为什么呢,因为这玩意和数学沾边!

ADL 是一种重数据和逻辑的专家级语言!所以在 理论界的地位相当高!

但是!!在实际应用中却难以推广,真的难用

所以通常大家都会使用非正式的语言来描述架构,比如 UML

比较地自由,没啥约束,就算你画得不标准,看得懂都行

重在表意

而 ADL 是有严格的规范和语法的,必须正确!

比如同样是描述两个组件交互

  • UML 一条箭头

  • ADL 必须说清楚,交互通过什么接口,什么通信协议,有什么约束,怎么交互

为什么 ADL 要这么地麻烦?

因为它在设计之初,就是是

一门以数学为基础,并支持推理的形式化语言

看这句话有力竭了吧?没事,我们来解释下

数学,就是 数理逻辑、代数、自动机理论或图论 等,不用关心,也就列一下

形式化语言,就是定义了一套特定的数学符号和语法规则,要求每一行描述都必须符合底层的数学规则

那相反的就是 非形式化语言了呗,就比如 自然语言,自由随意,那带来的问题就是

—— 模糊性和二义性

最经典的应该就是菜谱了吧 —— 放少许盐,小火慢炖

所以形式化语言,就是消除模糊性和二义性,好比定义了一套白名单词汇,你只能从里面挑出来用,那自然一就是一,二就是二

推理,这个就厉害了,在前两者的基础上,输出的内容那自然是十分严谨的

所以它可以直接给分析工具使用!

计算机工具自动证明该软件架构是否正确,或者提前找出隐藏的错误

所以 这便成就了 ADL 的最大作用!

  • 自动分析系统中是否存在死锁

  • 还能直接把架构跑起来,验证是否存在时序约束错误

  • 甚至直接自动生成底层的可执行代码,并完成编译和链接

这个确实了不得,那它难用也确实是有道理的了…

不过就是注定在前期耗费太多时间

但是!我觉得在 AI 时代,或许它可以迎来它的春天,因为我完全可以通过自然语言,让他生成严谨的专家级语言!!

这就是我觉得要了解的原因

但是 ADL 并不是一种具体的描述语言,而是一个集合概念

类似于 编程语言 这个概念一样,具体的是 Java、JavaScript、C++ 等几百种语言

所以同样的 ADL 也有很多种具体的语言,简单看看,知道有啥就好了

  • Wright,一种完全形式化的 ADL,适合复杂交互并进行死锁分析

  • C2 SADL,专用于描述用户界面密集型系统的架构

  • MetaH,特定领域的 ADL,主要应用于对可靠性和安全性要求极高的实时、容错、嵌入式系统

  • Rapide,基于事件的 ADL,适用于复杂、并发的分布式系统架构建模

但是虽然有很多种语言,但是他们是有共性的

一个标准的 ADL 必须支持以下四个核心设计元素

  • 组件 Component,就是架构中的一个功能模块,可以理解是 客户端,服务器,数据库等,一个有独立功能的实体,然后通过 端口 和 外部交互

  • 连接件 Connector,用来建立组件之间的交互关系,比如说是过程调用,还是 管道,还是 协议 之类的

  • 约束 Constraint,规定了 组件之间、组件和连接件之间 连接的一些限制条件,比如说 组件A 只能 和 组件B 建立交互,并且只能通过 连接件X 进行连接

  • 架构配置 Configuration,描述的就是具体的连接图了,描述谁通过什么连接到 谁的什么身上,比如说 把客户端A的发送端口,接在连接件X的caller上;把服务端B的接收端口,接在连接件X的 callee 上

约束和 架构配置有点容易混淆诶

再简化下,约束 就是 连接规则, 架构配置就是具体的连接

举个例子

约束就是 男的只能和女的结婚,架构配置就是 具体哪个男的和哪个女的结婚!

OK

我们现在也算是对ADL 有了一个大致的了解了,这个程度也足够了,再深入就要长脑子了,以后这种长脑子的活,就交给AI了

最后来看个 ADL 的例子好饿了,以 ACME 语言为例

我们来描述一些这个架构场景

一个客户端和一个服务端,客户端主要负责发送请求,服务端负责接收请求

它们之间通过 RPC来进行网络通信

严格且精确地限制了客户端和服务端不能直接胡调用,而是必须

  • 经过 rpc 连接件进行标准通信

  • 通过 Client 的 sendRequest 端口

  • 连接到 Server 的 receiveRequest 端口

可不是乱打的啊,一板一眼有备而来

好饿了,建立个印象就好了

所以现在我们知道了

  • ADL 是什么

  • ADL 有什么用

  • ADL 和 UML 的区别

  • ADL 具体长什么样

  • ADL 有什么内容

OK

(完)