集約の整合性についてArchUnitを用いてテストする①の別バージョン
@ArchTest
static ArchRule aggregate_object_only_be_accessed_from_root =
classes()
.that().resideInAPackage("com.example.domain")
.should().onlyBeAccessed().byClassesThat(new DescribedPredicate<JavaClass>("is AggregateRoot") {
@Override
public boolean apply(JavaClass input) {
return input.getAnnotations().stream().anyMatch(a -> a.toString().equals("AggregateRoot"));
}
});
@AggregateRoot
が集約ルートに付与されていればシンプルに判定できる。
アノテーション抽出するところはもう少しきれいに書けるはず・・・