structure101_使用structure101分析软件包的依赖关系

structure101

稳定应用程序的一个关键是结构良好的代码库。 我们知道我们应该建立尽可能多的黑匣子,因为一旦完成一个黑匣子,我们就不必再考虑其内部了。 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可。 这使您可以专注于要添加的下一个功能。

当我们想到黑匣子时,我们通常会想到类或整个jar包。 当然,课程应该是黑匣子,对此不做任何讨论。 jar包也是如此。 但是在类和jar包之间有另一层结构,通常不能直接将其视为黑盒:包。

一揽子计划通常是二等公民,对其相互关系的分析不够深入。 但是有一个很好的工具可以进行这种分析: Structure101 。 通常,它可以通过组织良好的图来帮助您监视和验证项目的依赖关系结构和复杂性。

因此,让我们从一个示例项目开始。 为此,我采取了自己的项目之一: japicmp是一种工具,用于根据更改的方法和类来计算两个jar存档的API之间的差异。 structure101有一个很棒的组合视图,它向您显示了项目包之间的依赖关系。 当前japicmp的外观如下:

结构101_之前

显然,我们可以看到例如cli软件包,它负责命令行解析,它使用异常以及config软件包,并且由main()方法所在的主软件包本身使用。 使用cli软件包,一切似乎都可以。 但是,三个软件包cmp,util和model呢? 类和方法(即业务逻辑)之间的差异计算位于程序包cmp中。 因此,它应该使用模型以及util包。 但是,这两个软件包不应具有任何向后依赖性。 此问题也显示在矩阵视图中:

structure101_before0_matrix

当我们仔细查看这三个程序包之间的纠缠时,我们发现util程序包中使用了cmp程序包中的类AccessModifier:

结构101_before2

除此之外,该类还用于模型中。 这清楚地表明,该类应该像在cmp包中那样留在模型包中。 这似乎是有道理的,因为类或方法的访问修饰符是jar存档模型的一部分,并且不属于业务逻辑。 如果将此类移至模型包,则会得到以下结果:

structure101_after

看起来好多了。 包装结构内没有任何缠结。 精美的布局还清楚地表明,整个应用程序都取决于模型,因为程序包位于图的底部。 从主程序包中调用驻留在cmp中的业务逻辑,并按需使用util,config和model。 对于cli和xml输出的实现所在的输出包,情况也是如此。 计算后,此软件包将使用配置以及模型。

结论

软件包不应是二等公民,而是可以帮助您构建应用程序的结构,以便轻松查看代码和单独的功能。 诸如structure101之类的工具可帮助您分析软件包之间的依赖关系,因此使软件包成为一侧的jar和另一侧的类之间的重要层次。

参考:在Martin's Developer World博客上,我们的JCG合作伙伴 Martin Mois 使用structure101分析了软件包的依赖关系 。

翻译自: https://www.javacodegeeks.com/2013/11/analyze-package-dependencies-with-structure101.html

structure101

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯基础模块6_2:定时器进阶

一、模块题目 二、原理图 1、数码管

蓝桥杯基础模块7:PWM脉宽调制

一、 模块题目 二、 原理简述 脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。随着电子技术的发展,出现了多种脉冲宽度调制(Pulse width modulation,PWM)技术,其中包括:相电压控…

蓝桥杯基础模块8_1:串口通信收发

一、模块题目 二、原理简述 1、串口重要概念概述 <1> 串行通信是指数据一位接一位地顺序发送或接收。 <2> 串行通信有SPI、IIC、UART等多种,最常见最通用的是指UART,无特殊说明,本文指的就是UART。 <3> 串行通信的制式有:单工、半双工、全双工三种。 &l…

蓝桥杯基础模块8_2:串口进阶

一、模块题目 二、原理简述 串行接口作为51单片机的重要外设,编程操作并不复杂,但在实际的项目应用中,由于数据结构和通信规约的不同,其程序逻辑也有各种变化。 一般情况下,上位机的命令可能不是一个字节,而是多个字节组成的命令帧,有的长度固定,有的长度变化;而且要…

蓝桥杯基础模块9:IO口扩展与存储器映射

一、模块题目 二、原理简述 三、源码 (1)I0扩展 //头文件 #include "reg52.h" //延时函数 void Delay(unsigned int t) {

带有Oracle Digital Assistant和Fn Project的会话式UI

在这里和那里&#xff0c;我们看到许多预测&#xff0c;很快聊天机器人将在用户与其系统之间的通信中扮演关键角色。 我没有水晶球&#xff0c;也不想等待这个“很快”&#xff0c;所以我决定现在就使这些预言成真&#xff0c;看看它的样子。 我正在工作的公司的标志产品是Fle…

蓝桥杯单片机基础学习00_2

三、功能模块 4、中断系统 中断系统 1&#xff09;中断的概念&#xff1a;这是大家需要在脑子里有的一个印象&#xff0c;我们大致可以将中断描述成CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b;CPU暂时中…

通信原理速识1:绪论

模块1 通信系统的端到端框架 &#xff08;一&#xff09;模拟通信系统 存在的两种变换 1.发送端&#xff1a;把连续信息变换成原始电信号&#xff08;基带信号&#xff09;&#xff08;信源&#xff09; 接收端&#xff1a;把电信号变换成连续消息&#xff08;受信&#xff09;…

atomiclong_想要更快地使用AtomicLong? 等待它。

atomiclong我经常听到Java原子类型&#xff08;java.util.concurrent.atomic&#xff09;超级快&#xff0c;可以很好地与高度并发的代码一起使用。 大多数时候&#xff0c;原子以健壮和高效的方式完成其工作。 但是&#xff0c;在某些情况下&#xff0c;原子类型上非托管争用的…

数字信号处理基础知识00

数字信号处理 Digital Signal Processing 离散时间信号与系统分析 Z变换 离散傅立叶变换&#xff08;DFT&#xff09; 快速傅立叶变换&#xff08;FFT&#xff09; 离散时间系统的结构 IIR滤波器的设计 FIR滤波器的设计 绪论——数字信号处理概述 基本概念&#xff1a;信号定…

Apache Camel 3的工作终于开始了

我们正在开始Apache Camel 3的工作。 我们正在多方面努力改善骆驼并引入新功能。 实际上&#xff0c;Guillaume Nodet的第一项工作实际上是在10月初开始的 &#xff0c;在那里他通过清理代码库&#xff0c;删除不推荐使用的代码和组件&#xff0c;改进路由引擎和核心中的其他内…

工程电磁场与电磁波第1章——矢量分析

1矢量分析 1.1 矢量代数 1.1.1 矢量加减法 1.1.2 矢量乘积 矢量的标量积&#xff1a;点积 矢量的矢量积&#xff1a;叉积 标量三重积、矢量三重积 1.2 正交坐标系 正交坐标系 正交坐标系的点积、叉积、标量三重积 度量系数 1.2.1 直角坐标系 1.2.2 圆柱坐标系 1.2.3 球坐标…

蓝桥杯扫盲之int, char, unsigned int, unsigned char的使用

一、C51常用数据类型 C语言中默认规则&#xff1a;short int 即为int&#xff0c;long int 即为 long&#xff0c;前面若无unsigned符号默认signed型。 0和1每一个所占空间是一位&#xff08;b&#xff09;&#xff0c;也是单片机存储器中最小的单位。 1B&#xff08;字节&…

第十一届 蓝桥杯 单片机设计与开发项目 省赛 程序设计试题及源码

一、试题 1、 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计 与调试。 1.2 选手在程序设计与调试过程中,可参考组委会提供的“资源数据包”。 1.3 请注意: 程序编写、调试完成后选手应通过考试系统提交完整、可编译的 Keil 工程文件…

AWS:避免那些“神圣的法案”时刻的一些技巧

云非常棒&#xff1a;几乎100&#xff05;的可用性&#xff0c;几乎零维护&#xff0c;按需付费&#xff0c;最重要的是&#xff0c;它具有无限的可扩展性。 但是最后两个很容易把你咬回去&#xff0c;把那令人敬畏的事情变成一场噩梦。 有时您会看到类似的故事&#xff1a; …

樊昌信版通信原理期末复习第一章绪论

第1章 绪论 一、知识点梳理 1、通信的目的&#xff1a;传递消息中所包含的信息。 2、消息&#xff1a;是物质或精神状态的一种反映。 3、信息&#xff1a;是消息中包含的有效内容。 4、通信系统的一般模型 信源输入变换器&#xff1a;将非电物理量变成电信号。 发送设备&…

DC/DC开关电源设计

DC/DC开关电源设计视频讲解链接&#xff1a;https://www.bilibili.com/video/BV1Dv411y7jM?t156 一、电源概述 主要内容&#xff1a;线性稳压电源和开关稳压电源的概念理解 1、稳压电源&#xff08;stabilized voltage supply&#xff09;是能为负载提供稳定的交流电或直流…

jboss junit_使用junit-drools进行JBoss Drools单元测试

jboss junit最近&#xff0c;我一直在大量使用JBoss Drools进行项目。 我不是Drools专家-我也不太相信这个框架&#xff0c;或者可能不是只相信该项目中的特定用例-我发现很难为基于Drools的业务规则编写简单&#xff0c;可维护的单元测试 。 这就是junit-drools诞生的方式–简…

【从3D点云生成平面图:一种空间划分方法】

文章目录 概要概述实验总结 概要 本文提出了一种从原始传感器数据自动重建室内环境平面图的新方法。现有的方法是通过检测角点并将它们连接起来&#xff0c;以平面图形的形式生成平面图&#xff0c;与此相反&#xff0c;本文采用了一种策略&#xff0c;将空间分解为多边形分区…

数字信号处理基础知识之DFT、DTFT、DFS、FFT基本概念扫盲

一、名词汇总 DFT&#xff1a;离散傅里叶变换&#xff08;Discrete Fourier Transform&#xff09;&#xff1b; DTFT&#xff1a;离散时间傅里叶变换&#xff08;Discrete-time Fourier Transform&#xff09;&#xff1b; DFS&#xff1a;离散傅里叶级数&#xff0c;又称离散…