写点什么

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:245461
用户头像

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

关注

评论

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

SAP Spartacus Session affinity

汪子熙

后端 28天写作 12月日更 Spartacus 会话

安全办公 |企业级IM即时通讯私有云解决方案

BeeWorks

全链路数据血缘在满帮的实践

华为云开发者联盟

sql 图数据库 图计算 全链路数据血缘 数据血缘

Java 程序员必须掌握的 10 款开源工具

编程江湖

java编程 java开发工具

【LeetCode】最短补全词Java题解

Albert

算法 LeetCode 12月日更

Linux运维,Linux系统学习

侠盗安全

Linux linux运维 运维工程师 云计算架构师

【架构实战营】-模块一作业

糖糖学编程

架构实战营

模块一学习总结

糖糖学编程

架构实战营

给弟弟的信第8封|计算机专业应该掌握的知识

大菠萝

28天写作

面试官:你是怎样理解Fiber的

全栈潇晨

React react fiber

钉钉宜搭亮相“第二届ISIG中国产业智能大会”:云钉低代码,构建企业酷应用

一只大光圈

钉钉 低代码 数字化 钉钉宜搭 ISIG

聊聊程序员35岁危机

全栈潇晨

程序员 大前端 35岁危机

react源码解析3.react源码架构

buchila11

React react fiber

从0到1教你如何使用 p5.js 绘制简单的动画

海拥(haiyong.site)

大前端 动画 28天写作 签约计划第二季 12月日更

react源码解析6.legacy模式和concurrent模式

buchila11

React

团队基建系列 - 组织知识传承 4 破局

搬砖的周狮傅

团队成长

DataPipeline携手云南开放大学,以实时数据融合助力高校精细化管理

DataPipeline数见科技

数据库 中间件 Big Data 数据融合 高校

Flutter 2.8 的新特性【Flutter 专题 20】

坚果

flutter 28天写作 12月日更

Redis(一):单线程为何还能这么快?

IT巅峰技术

redis 分布式 架构师 分布式缓存 Java Redis

[Pulsar] Consumer 确认消息原理

Zike Yang

Apache Pulsar 12月日更

拆分电商系统为微服务

Steven

架构实战营

万字长文--基于业务视角的上云实践

hackstoic

DevOps 运维 云原生 架构设计 签约计划第二季

前端开发:npm run serve和npm run dev的区别

三掌柜

28天写作 21天挑战 12月日更

Maven进阶(三):配置多仓库

No Silver Bullet

maven 12月日更

Flutter 自定义 ACEFoldTextView 折叠文本

阿策小和尚

28天写作 0 基础学习 Flutter 内容合集 签约计划第二季 12月日更

Go语言学习查缺补漏ing Day7

恒生LIGHT云社区

golang Go 语言 编程语言‘

让工具成为双手的延伸

Zilliz

数据库 书籍推荐 程序 书籍

【Promise 源码学习】第十五篇 - 了解 generator 生成器

Brave

源码 Promise 12月日更

信息架构升级|宜搭邀你体验「沉浸式」应用搭建

一只大光圈

钉钉 低代码 数字化 钉钉宜搭

把管理做简单

Ian哥

项目管理 十六个字 阿里管理箴言

架构实战营模块一作业

黄秀明

「架构实战营」

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