我有两个单独的软件包:
mycomp.sales
- Order
- OrderPlaced
mycom.delivery
- Delivery
- OrderPlacedListener (depends on mycomp.sales.OrderPlaced)
我想设置一个规则,以检查软件包
mycom.delivery
仅对OrderPlaced
有依赖性,而软件包mycomp.sales
中没有其他类。到目前为止,我想到了这个:
JavaClasses importedClasses = new ClassFileImporter().importPackages("mycomp.delivery");
ArchRule rule = classes()
.should().onlyDependOnClassesThat().resideOutsideOfPackages("mycomp.sales..")
.orShould().onlyDependOnClassesThat().areAssignableTo(OrderPlaced.class);
rule.check(importedClasses);
但这在
OrderPlacedListener
(与mycomp.sales.OrderPlaced
有依赖性)上失败。这个怎么做?
最佳答案
在您的代码中,两个OR子句均被分别求值,这意味着1.所有依赖关系都必须在mycomp.sales..
之外(不是),或者2.所有依赖关系都必须可分配给OrderPlaced
(显然不是)。
您必须定义这样的复合规则:
ArchRule rule = classes()
.should().onlyDependOnClassesThat(
resideOutsideOfPackages("mycomp.sales..")
.or(type(OrderPlaced.class)));