0

我得到了看似微不足道的用例,但我仍然无法弄清楚。让我们看一下包结构。

-- 通用包
-- 包1
---- DAO
-  -  常见的
-  -  服务
-- 包2
---- 分包1
---- 分包2

我想要实现的是创建一个规则,其中 Package2 中的所有类不能使用 Package1 中的任何类,除了常见类。到目前为止,我已经有了这样的东西:

noClasses()
    .that()
    .resideInAPackage("package2..")            
    .should()
    .resideInAnyPackage("package1..")
    // and how write eg. except("package1.common")
    .check(classes);

但我无法弄清楚如何从这个等式中排除package1.common 。任何人都可以帮忙吗?

4

1 回答 1

2

我假设您忘记.dependOnClassesThat()在问题中包含 a 。
(类package2只是不驻留在package1...)

如果您的约束不能通过fluent API表达,请考虑使用基于任意ArchConditionsDescribedPredicates 的更强大的 API 。对于在 fluent API 中表示为方法调用的约束,您通常可以找到具有DescribedPredicate相同名称的等效预定义,例如dependOnClassesThat().resideInAPackage(pkg)dependOnClassesThat(resideInAPackage(pkg))。您的 IDE 应该可以帮助您找到正确的静态导入。从那里开始,通常很容易组合更复杂的约束,甚至不必实现自定义ArchConditions 或DescribedPredicates。

在你的情况下,我猜你正在寻找这样的东西:

noClasses()
    .that().resideInAPackage("package2..")
    .should().dependOnClassesThat(
        resideInAnyPackage("package1..").and(
            not(resideInAnyPackage("package1.common.."))
        )
    )
于 2022-01-24T20:39:32.797 回答