* リンク [#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

** 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 = UwmRadarApp.class, importOptions = 
 @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