【发布时间】:2018-12-14 22:41:58
【问题描述】:
如果我想通过 ArchUnit 使某个 Java 包免于第三方依赖,我该怎么做?
更具体地说,我正在考虑将我的域模型保持在一个没有弹簧代码的六边形架构中。我指定了一些我认为应该阻止模型使用弹簧的规则。但是,我可以使用 @Component 和 @Bean 之类的 spring 注释而不会导致违规。
到目前为止我尝试的是
layeredArchitecture().
layer("domain").definedBy(DOMAIN_LAYER).
layer("application").definedBy(APPLICATION_LAYER).
layer("primary-adapters").definedBy(PRIMARY_ADAPTERS).
layer("secondary-adapters").definedBy(SECONDARY_ADAPTERS).
layer("spring").definedBy("org.springframework..")
whereLayer("spring").mayOnlyBeAccessedByLayers("primary-adapters", "secondary-adapters", "application").
because("Domain should be kept spring-free").
check(CLASSES);
还有
noClasses().that().resideInAPackage(DOMAIN_LAYER).
should().dependOnClassesThat().resideInAPackage("org.springframework..").
check(CLASSES);
noClasses().that().resideInAPackage(DOMAIN_LAYER).
should().accessClassesThat().resideInAPackage("org.springframework..").
check(CLASSES);
Here 一个可以正常执行测试的代码示例,尽管com.example.app.domain.Factory 正在导入org.springframework...。
【问题讨论】:
标签: java spring domain-driven-design hexagonal-architecture archunit