我想编写一个 ArchUnit 规则来验证服务类(由@Service
Spring 注释注释)将仅使用其自己的包中的存储库,而不使用其他包中的存储库。
我目前有:
noClasses().that()
.areAnnotatedWith(Service.class)
.should()
.dependOnClassesThat().areAnnotatedWith(Repository.class)
.orShould().dependOnClassesThat().haveSimpleNameEndingWith("Repository")
这不好,因为它根本不允许对存储库有任何依赖。
或者,我可以这样做:
noClasses().that()
.resideInAPackage("com.company.backend.user")
.and()
.areAnnotatedWith(Service.class)
.should()
.dependOnClassesThat(resideOutsideOfPackage("com.company.backend.user").and(annotatedWith(Repository.class)))
.orShould().dependOnClassesThat(have(resideOutsideOfPackage("com.company.backend.user").and(simpleNameEndingWith("Repository"))))
.as("Service classes should only use Repository class(es) from the own package");
但是我重复了包名com.company.backend.user
3 次,我需要为每个包定义这个规则。