【架构设计】软件架构描述语言 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
(完)
夜雨聆风
