0

我有两个单独的包:

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)上失败了。

这个怎么做?

4

1 回答 1

1

在您的代码中,两个 OR 子句都是单独评估的,这意味着 1. 所有依赖项必须在外部mycomp.sales..(不是)或 2. 所有依赖项必须可分配给OrderPlaced(显然不是)。

您必须定义这样的复合规则:

ArchRule rule = classes()
    .should().onlyDependOnClassesThat(
        resideOutsideOfPackages("mycomp.sales..")
            .or(type(OrderPlaced.class)));
于 2020-03-18T09:13:38.713 回答