我们通过一些 ArchUnit 规则检查我们的软件架构。
其中之一是对我们分层架构的测试。
这适用于方法。如果我们从 layer1 访问 layer3 的一个方法,我们会得到一个异常。
但是,如果从 layer1 访问在 layer3 中声明的字段,则不会引发异常。
.layer("layer1").definedBy("com.acme.layer1")
.layer("layer2").definedBy("com.acme.layer2")
.layer("layer3").definedBy("com.acme.layer3")
.whereLayer("layer3").mayNotBeAccessedByAnyLayer()
.whereLayer("layer2").mayOnlyAccessedByLayers("layer3")
.as("Respect the layered architecture");
如果我们将一个字段从 layer3 导入到 layer1 类,这不会抛出异常:
package com.acme.layer1
import static com.acme.layer3.SOME_LABEL
public class x {
...
}
我们的期望是,在任何其他层访问来自 layer3 的字段也应该引发异常。或者有其他方法可以检查吗?