ArchUnit 类 应该只依赖于包中的特定 类
ArchUnit classes should depend only on particular classes from a package
我有两个独立的包:
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)));
我有两个独立的包:
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)));