1. ArchUnit(Java)的架构规则表达中依赖方向、包结构、注解使用、继承层级
ArchUnit 如何表达架构规则?依赖方向、包结构、注解使用、继承层级分别如何表达?
- ArchUnit 的规则 DSL
- 依赖方向、包结构、注解、继承层级的表达
- 架构规则的可执行测试
ArchUnit 是 Java 的架构测试库,用流式 DSL 表达可自动执行的架构规则。依赖方向:classes().that().resideInAPackage("..domain..").should().onlyDependOnClassesThat().resideInAPackage("..domain..") 可强制领域层不依赖基础设施层。包结构:classes().that().haveSimpleNameEndingWith("Controller").should().resideInAPackage("..controller..") 约束命名与包对应。注解使用:classes().that().areAnnotatedWith("@Service").should(). ... 检查注解的适用范围。继承层级:classes().that().implement(SomeInterface.class).should(). ... 约束实现类。规则以 @ArchTest 标注的静态字段声明,由 JUnit 运行,违反即测试失败。
ArchUnit 把"架构约束"变成可执行的单元测试,在 CI 中守护架构。它基于字节码分析,能在不运行应用的情况下检查依赖方向、包结构、注解与继承关系,是架构守护的自动化手段。
@ArchTest
static final ArchRule domain_should_not_depend_on_infrastructure =
classes().that().resideInAPackage("..domain..")
.should().onlyDependOnClassesThat()
.resideInAnyPackage("..domain..", "java..", "org..");