InfoQ

新闻

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

作者 Michael Bushe 译者 王丽娟 发布于 2008年2月20日 上午12时24分

社区
Architecture
主题
工件和工具,
代码分析
标签
IntelliJ IDEA,
视觉化

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

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

DSM of a layered system

  分层系统的DSM

DSM of a strictly layered system.

严格分层系统的DSM

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

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

DSM for the EventBus, drilled to the class level

EventBus库的IntelliJ DSM

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

navigation to the broken dependency

IntelliJ的DSM工具还有改进的余地。例如,IDEA并没有利用前面提及的已编号的行和列来进一步提高其可用性。而其它工具,比如说Lattix,则有更为强大的重构支持。Lattix可以从矩阵的可视化图中直接移动类或包。

Lattix Refactoring

Lattix重构 
DSM作为一个强大的工具,正在走上更多从业者的桌面。
查看英文原文IntelliJ IDEA's Dependency Structure Matrix Tool Visualizes Architecture

深度内容

模块化Java:声明式模块化

本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。

Ian Robinson和Jim Webber谈论基于Web的整合

本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。

项目管理修炼之道(精选版)

项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。

那是鸟,还是飞机?不,那是超人!

在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。

访谈和书摘:Eben Hewitt的新书《Java SOA Cookbook》

Java SOA Cookbook

Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。

Mark Richard的《Java消息服务》第二版

Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。

模块化Java:动态模块化

本文是“模块化Java”系列文章的第三篇,讨论动态模块化,内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。

让测试也敏捷起来

对于测试组织来说,敏捷方法带来的快速迭代却让测试本身变得困难起来:缺乏“足够详细的文档”,缺乏“仔细设计用例的时间”等等。在本演讲中,段念将与大家探讨如何在敏捷过程中进行测试。