- 追加された行はこの色です。
- 削除された行はこの色です。
* リンク [#rf823f25]
** 公式ガイド [#r4df79b9]
https://www.archunit.org/userguide/html/000_Index.html
*** ArchUnitの背後にあるアイデア [#k84e0c33]
https://www.archunit.org/userguide/html/000_Index.html#_ideas_and_concepts
* リンク [#rf823f25]
** ArchUnitで考えるアーキテクチャ構造とその検証 [#t125f92b]
https://developer.mamezou-tech.com/blogs/2022/05/19/archunit-and-architechure/
** サンプル [#la9c5133]
import static com.tngtech.archunit.base.DescribedPredicate.alwaysTrue;
import static
com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyOf;
import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
import com.tngtech.archunit.core.importer.ImportOption.DoNotIncludeTests;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
@AnalyzeClasses(packagesOf = MySomeApp.class, importOptions =
DoNotIncludeTests.class)
class TechnicalStructureTest {
// prettier-ignore
@ArchTest
static final ArchRule respectsTechnicalArchitectureLayers =
layeredArchitecture()
.layer("Config").definedBy("..config..")
.layer("Web").definedBy("..web..")
.optionalLayer("Service").definedBy("..service..")
.layer("Security").definedBy("..security..")
.layer("Persistence").definedBy("..repository..")
.layer("Domain").definedBy("..domain..")
.whereLayer("Config").mayNotBeAccessedByAnyLayer()
.whereLayer("Web").mayOnlyBeAccessedByLayers("Config")
.whereLayer("Service").mayOnlyBeAccessedByLayers("Web", "Config")
.whereLayer("Security").mayOnlyBeAccessedByLayers("Config", "Service", "Web")
.whereLayer("Persistence").mayOnlyBeAccessedByLayers("Service", "Security", "Web", "Config")
.whereLayer("Domain").mayOnlyBeAccessedByLayers("Persistence", "Service", "Security", "Web", "Config")
.ignoreDependency(belongToAnyOf(MySomeApp.class), alwaysTrue())
.ignoreDependency(alwaysTrue(), belongToAnyOf(
com.suho.uwmradar.config.Constants.class,
com.suho.uwmradar.config.ApplicationProperties.class
));
}