写点什么

IntelliJ IDEA 的 DSM 工具使架构可视化

2008 年 2 月 20 日

优良架构的一个重要特点就是通过组件分层使模块间的依赖流畅贯穿于整个架构。如何描述和维护组件间的依赖是一个常见却又很难解决的工作。UML 包图(package diagram)提供了描述这种依赖的方法,但是创建包图往往很耗费时间,甚至在反向工程时,获得一个直观的设计也需要很长的时间。此外,UML 也不能有效地进行修正,用它来维护大型且复杂的系统的依赖图,投资回报率往往很小。

依赖结构矩阵(Dependency Structure Matrices, DSM ),这一较新技术的出现填补了这个空白。DSM 是一个矩阵,其中每行是一个模块,列则在另一维度上显示一组同样的模块。每个单元格表示两个模块之间的交集,以及它们之间依赖的数目。不需要任何更多的信息,一个人通过典型的例子就能迅速且直观地看到漂亮的DSM 可视化图。

分层系统的DSM

严格分层系统的DSM

匆匆一瞥之后我们接着来看,每行代表分层架构中的一个包。这些行依次从1 到5 进行编号。列也依次编号为1 至5,分别表示与行同样的模块。在严格分层系统中,application 只依赖于model(37 次),model 只依赖于domain,等等。在分层系统中,上层(比如application)可以依赖于其下任何一层(比如util)。有了这种可视化图,只要代码编写违反了规则,可视化图就会立即反映出来。任何出现在右上方的依赖都表明违反了架构的意图。

IntelliJ 已经在新版本“Magnificent 7”中引入了新的 DSM 工具。不用考虑代码基线(codebase)的分层,不用手动整理 UML 图,IntelliJ 会自动从一个已存在的工程生成 DSM。像其它 DSM 工具一样,IntelliJ 能自动调整节点,使依赖显示在左下方。DSM 是交互式的,可以下钻到类级别:

在这个例子中,IntelliJ 的 DSM 工具表明,ReferenceStrength 在架构中,被其下层使用了 4 次。将 DSM 工具集成到 IDE 中非常方便。IDEA 能非常容易地显示出代码基线中的 4 次引用,使问题容易地被修复。在这种情况下,可以使用 IntelliJ 的重构工具把 ReferenceStrength 移到一个更高层次的包中。

2008 年 2 月 20 日 00:243326
用户头像

发布了 151 篇内容, 共 53.1 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

使用Kotlin语言初始化数组

mengxn

数组 kotlin 初始化

钢铁侠马斯克之仰望星空

池建强

创业 马斯克 Space X

Go: 使用GODEBUG改善Goroutine的使用

陈思敏捷

go golang debug 协程

Prometheus 2.18.0 新特性

耳东

Prometheus

Linux命令-df

一周思进

直面一个复杂世界

史方远

读书笔记 个人成长 随笔杂谈

B端产品经理养成记(1):业务场景

涛哥

产品经理 需求 产品开发

B端产品经理养成记(2):用户故事

涛哥

产品经理 需求 产品开发

ARTS打卡第一周5.25-5.31

我笔盒呢

云上基础产品之内容分发网络

韩超

CDN 公有云 内容分发网络

一款霸榜 GitHub 的开源 Linux 资源监视器!

JackTian

GitHub Linux 开源项目 bashtop 资源监视器

除了直接看余额,谁更有钱还能怎么比(二)

石君

去中心 零知识证明

ARTS Week2

丽子

RocketMQ - 如何实现事务消息

Java收录阁

RocketMQ

工厂模式(四)泛型工厂之MyBatis Mapper代理

LSJ

Java 设计模式 泛型 工厂注册中心

【摘】Git-从零单排 02期

卡尔

git 原理 开发工具 工具链

做PO难,难于上青天

刘华Kenneth

敏捷 产品经理 决策 PO

不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...

JackTian

GitHub 学习 程序员 编码 开源项目

云上基础产品之虚拟私有云

韩超

公有云 VPC 虚拟私有云

戒掉手机吧

鼎玉谷

人生 手机 时间 浪费 控制

【5月】本月读书学到了什么

Neco.W

创业 读书感悟 阅读量

你想活出怎样的人生

Janenesome

读书笔记 思考

工作那么久,你还具备学习能力么?

夜来妖

学习 程序员成长

N皇后问题

孙苏勇

算法 DFS 深度优先搜索

draw.io-取代visio的流程图绘制工具

Rice嵌入式开发技术分享

chrome vscode 写文章神器 draw.io

转行程序员浅谈进程间的socket通信

WB

Linux socket 转行程序员

RocketMQ - 高可用设计

Java收录阁

RocketMQ

关于 Windows 10 2020 年 5 月更新

FeiLong

程序猿邂逅相亲妹,默默无语两行泪

码农神说

程序员 相亲

架构之路

强哥

极客大学架构师训练营

浅说Docker基础知识与核心原理

岿然独存5

go Docker 软件

IntelliJ IDEA的DSM工具使架构可视化-InfoQ