<!-- markdown -->

# リンク
## 公式ガイド
https://www.archunit.org/userguide/html/000_Index.html

### ArchUnitの背後にあるアイデア
https://www.archunit.org/userguide/html/000_Index.html#_ideas_and_concepts

## ArchUnitで考えるアーキテクチャ構造とその検証
https://developer.mamezou-tech.com/blogs/2022/05/19/archunit-and-architechure/

## サンプル

    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
            ));
    }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   最終更新のRSS