发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

  • 2008-02-20
  • 本文字数:812 字

    阅读完需:约 3 分钟

优良架构的一个重要特点就是通过组件分层使模块间的依赖流畅贯穿于整个架构。如何描述和维护组件间的依赖是一个常见却又很难解决的工作。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-02-20 00:244861
用户头像

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

关注

评论

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

ARTS Week10

丽子

实战中学习浏览器工作原理 — 之 HTTP 请求与解析

三钻

CSS Java 大前端 浏览器

从每秒6000写请求谈起

架构师修行之路

程序员 架构师 高并发系统设计

Python 函数为什么会默认返回 None?

Python猫

Python 编程

一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

Python猫

Python 编程

持续集成有什么好处?快来看鸭

清菡软件测试

jenkins

区块链技术破解数字版权保护难题

CECBC

区块链 版权保护 数字技术

北京首台区块链政务终端亮相 一键“拉取”链上数据

CECBC

区块链技术

凤凰交易所 全球首个多元化生态交易平台震撼来袭

InfoQ_967a83c6d0d7

Docker 搭建 Redis Cluster 集群环境

哈喽沃德先生

redis Docker 容器 集群 redis cluster

学习笔记丨结构体中的内存管理

Liuchengz.

c Linux 学习

Python 中的数字到底是什么?

Python猫

Python 翻译 PEP

缓存与数据库一致性问题深度剖析

Zhendong

数据库 缓存 秒杀系统

dubbo应用级服务发现初体验

捉虫大师

dubbo 注册中心

macos主流工作开发套件指南

久违

macos Docker 大前端 自动化部署

经济适用的企业内外网互动直播方案

fumingwang

音视频 直播 视频会议 企业应用

芯片破壁者(十五):仙童半导体和“八叛逆”所缔造的“硅谷模式”

脑极体

区块链+公共安全 大有可为

CECBC

区块链 安全

Python 为什么能支持任意的真值判断?

Python猫

Python 编程

Python 为什么没有 void 关键字?

Python猫

Python 编程

妈妈,今天您几点下班?

脑极体

深度解读:Apache DolphinScheduler 新架构与特性,性能提升2~3倍

代立冬

大数据 开源 工作流调度 开源社区

oeasy教您玩转linux010204-figlet

o

Flink保存点-17

小知识点

scala 大数据 flink

LeetCode题解:239. 滑动窗口最大值,双循环暴力,JavaScript,详细注释

Lee Chen

大前端 LeetCode

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

[翻译]Defer,Panic,and Recover

卓丁

defer panic recover Go 语言

Apache Pulsar 8 月月报:里程碑一个接一个

Apache Pulsar

大数据 云原生 Apache Pulsar 消息系统 消息中间件

全场景智慧:新工业革命必须拥抱的晨曦

脑极体

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

Python猫

Python 编程

JavaScript 深拷贝与浅拷贝

梁凤波

IntelliJ IDEA的DSM工具使架构可视化_架构_Michael Bushe_InfoQ精选文章