实战Arch Unit

在以前的文章中介绍了通过 《实战PMD》《实战Checkstyle》在代码级守护我们的代码,比通过《实战Jacoco》来了解当前项目的测试覆盖情况。通过得到数据了解我们的项目质量,进行定向的改进。

使用这些简单方面的自动化工具比凭空猜想或者全靠人力来接发现代码上的问题,效率高多了。

这篇文章将聚焦在Arch Unit上,Arch Unit能通过为我们提供架构的守护。

  1. 开发前的准备

  2. 项目分层检测

  3. 循环依赖检测(同一个package下,不同package下的循环依赖)

  4. Package依赖检测

  5. Package和Class的包含关系检测

  6. 忽略某些违规行为的三种凡是

  7. 如何组织Arch Unit的测试

先来看一下Arch Unit的相关功能介绍。

在这里插入图片描述

这些功能很好,但是要是面面俱到,那么维护、查看规则也是一件麻烦事,所以针对项目情况,有选择定制,才能更好的展现器价值。

通过自己坐在项目的情况,可以通过金字塔来罗列:哪些行为做了价值大,哪些事情做了价值小。


1,开发前的准备

Arch Unit集成了Junit4Junit5,在它的模块中包含:archunitarchunit-junit4archunit-junit5-apiarchunit-junit5-enginearchunit-junit5-engine-api

在项目中只需要引入测试相关的JUnit5相关的依赖。

dependencies {
    testCompile 'com.tngtech.archunit:archunit-junit5:0.13.1'
}

test {
    useJUnitPlatform()
}

实践过程中有可能遇到的情况:

Tips 01: 当 @Analysis 中配置的 package 目录写错时,并不会报错package不存在,而是会让全部测试通过。

Tips 02: *在 layer 验证的时候,定义 layer的时候,package 名称需要根据需要在包名后添加 “…”,例如:

layeredArchecture()
.layer("Representation").definedBy("com.page.practice.representation..")
.layer("Domain").definedBy("com.page.practice.domain..")
...

.whereLayer("Domain").mayOnlyAccessedByLayers("Representation")
...

其中的 com.page.practice.representation.. 结尾使用 ..,原因是 representation 中如果包含了其他两个package 例如:requestresponse,那么当 request 中调用到了 domain 中类后,上面的代码是可以检测通过。

如果去掉 com.page.practice.representation.. 结尾的 ..,那么当request 中调用到了 domain 时,检测是不过的。


2, 项目分层检测

在做DDD的一些落地项目中我们会使用四层架构,即RepresentationApplicationDomainInfrastructure四层,这四层的调用关系如下图所示。

在这里插入图片描述

下面通过一个例子我们来约束这几层的调动关系。


package com.page.practice.archunit;

import com.tngtech.archunit.junit
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值