【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论

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

Apache APISIX 社区周报 | 2021 11.1-11.14

API7.ai 技术团队

云原生 API网关 社区周报 Apache APISIX

来看看深度学习如何在文娱行业“落地”

博文视点Broadview

往ABAP gateway system上和CloudFoundry 部署HTML5应用

Jerry Wang

log SAP CloudFoundry 11月日更

架构训练营模块七作业 - 设计消息队列存储消息数据的 MySQL 表

李焕之

9个问题,带你掌握流程控制语句中的java原理

华为云开发者联盟

Java 变量 finally 流程控制 语句

dart系列之:dart类中的泛型

程序那些事

flutter dart 程序那些事 11月日更

Android Activity Deeplink启动来源获取源码分析

vivo互联网技术

android 源码解析 Activity

Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

华为云开发者联盟

windows 漏洞 Windows漏洞 MS08-067 远程代码

在 Spring Boot 中使用搜索引擎 Elasticsearch

码语者

Spring Boot Elastic Search

数据分片的原则和经验

编程宝库

系统架构 数据分片 编程宝库

软件架构治理 之 如何识别和定位架构问题

码猿外

微服务 架构设计 软件架构治理

Vue进阶(幺玖零):表单验证 trigger:‘blur‘ OR trigger:‘change‘ 区别

No Silver Bullet

Vue 表单校验 11月日更

一文详细分析公式树开源库

华为云开发者联盟

算法 数据 公式树 变异

Vue项目优化打包——前端加分项

CRMEB

Scrum Master是什么?Scrum Master的职责是什么?和PM又有哪些区别?

PingCode

敏捷开发 PM Scrum Master

直播带货系统都有什么功能?如何搭建?

风行无疆

springboot从数据库中获取application配置

小鲍侃java

11月日更

如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

Jerry Wang

Java SAP CloudFoundry 11月日更

云小课 | DSC之数据水印,防止数据被盗用

华为云开发者联盟

版权保护 华为云 数据安全中心 数据水印 追踪溯源

uni-app技术分享| 10分钟实现一个简易uniapp视频通话

anyRTC开发者

uni-app 音视频 WebRTC 实时通信 视频通话

【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

冰河

Java 并发编程 多线程 高并发 异步编程

三大重磅报告,莅临GOPS全球运维大会#324龙智展位即可获取!

龙智—DevSecOps解决方案

运维 gops

实战 | 超详细的Kafka集群操作

五分钟学大数据

11月日更

基于OneData的数据仓库方法论

大数据技术指南

11月日更

前端服务框架调研:Next.js、Nuxt.js、Nest.js、Fastify

智联大前端

node.js Vue 服务端 React

软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?

阿里云视频云

阿里云 算法 视频超分 视频云 异构计算

手把手带你玩转LiteOS Ping组件

华为云开发者联盟

协议 LiteOS ping 组件 数据包

令人不悦的–requests.exceptions.ProxyError

老表

Python Error 11月日更 ProxyError

千万级学生管理系统的考试试卷存储方案

Steven

架构实战营

河南等保测评公司都有哪几家?都在哪里?

行云管家

网络安全 信息安全 数据安全 等级保护

研究综述 | AI -自动化机器学习

索信达控股

机器学习 自动化机器学习 机器学习算法

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