Используйте тест ArchUnit, чтобы предотвратить доступ одного слоя к другому.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Используйте тест ArchUnit, чтобы предотвратить доступ одного слоя к другому.

Сообщение Anonymous »

Я пытаюсь написать тест ArchUnit, который предотвращает доступ уровня контроллера к уровню репозитория. Моя попытка выглядит так

Код: Выделить всё

@AnalyzeClasses(packages = "com.myapp", importOptions = ImportOption.DoNotIncludeTests.class)
public class LayeredArchitectureTests {

@ArchTest
static final ArchRule testLayerDependencies = layeredArchitecture().consideringAllDependencies()
.layer("Controllers").definedBy(HasAnnotations.Predicates.annotatedWith(RestController.class))
.layer("Services").definedBy(HasAnnotations.Predicates.annotatedWith(Service.class))
.layer("Repositories").definedBy(JavaClass.Predicates.assignableTo(Repository.class))
.whereLayer("Repositories").mayOnlyBeAccessedByLayers("Services", "Repositories");
}
Это не совсем работает, поскольку за пределами этих трех слоев есть некоторые классы, которые имеют доступ к классам на уровне репозиториев. Должен быть способ выразить это примерно так:

Код: Выделить всё

// this mayNotBeAccessedByLayers method doesn't actually exist
.whereLayer("Repositories").mayNotBeAccessedByLayers("Controllers");
Но если такое средство существует, я не могу его найти.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-another
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»