「他の集約への参照はId経由で行う」ことをテストしてみる。
テストコード
@ArchTest
static ArchRule only_access_through_id_when_depend_on_another_aggregate_root =
classes()
.that().resideInAPackage("com.example.domain")
.and().haveSimpleName("HogeRoot")
.should().onlyAccessFieldsThat(new DescribedPredicate<JavaField>("not depend on another aggregate root object") {
@Override
public boolean apply(JavaField input) {
return !input.getClass().getSimpleName().equals("FugaRoot");
}
});
集約ルートを直接参照していないことだけテストしている。
フィールド名をendWith~("Id")
みたいに判別すればもう少し厳密にできる。
集約ルートを機械的に判別するのが辛い。
@AggregateRoot
みたいなものがあれば幸せになれそう。