Мы проверяем нашу программную архитектуру по некоторым правилам ArchUnit.
Одним из них является тест для нашей многоуровневой архитектуры.
Это хорошо работает для методов.
Если мы получим доступ к методу layer3 из layer1, мы получим исключение.
Но если получить доступ к полю, объявленному в layer3, из layer1, это не вызовет исключения.
.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 class:
package com.acme.layer1
import static com.acme.layer3.SOME_LABEL
public class x {
...
}
Мы ожидаем, что доступ к полям из layer3 в любом другом слое должен вызвать исключение.
Или есть другой способ проверить?