【问题标题】:How to differentiate usage and inheritance in a layered architecture?如何区分分层架构中的使用和继承?
【发布时间】:2022-01-03 14:46:03
【问题描述】:

我正在尝试验证以下依赖项:

Source

在这张图中,红色的关系是禁止的,绿色的关系是允许的:

  • 适配器包中的任何类都不能继承自端口包中的类;
  • 适配器包中的任何类都可以使用(例如,具有字段)端口包中的类;
  • 服务包中的任何类都不能使用(例如,有一个字段)端口包中的类;
  • 服务包中的任何类都可以继承端口包中的类;

如果可能,我想将这些验证添加到分层架构中。

谢谢。

【问题讨论】:

    标签: archunit


    【解决方案1】:

    LayeredArchitecture 考虑层之间的 all dependencies。您不能禁止继承,但允许访问——反之亦然。我建议改为定义单独的特定规则:

    @ArchTest
    ArchRule adapter_should_not_inherit_from_port = noClasses()
        .that().resideInAPackage("….adapter")
        .should().beAssignableTo(JavaClass.Predicates.resideInAPackage("….port"));
    
    @ArchTest
    ArchRule service_should_not_access_port = noClasses()
        .that().resideInAPackage("….service")
        .should().accessClassesThat().resideInAPackage("….port");
    

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多