【问题标题】:Dependency restrictions without modules没有模块的依赖限制
【发布时间】:2023-03-29 19:46:01
【问题描述】:

假设有这样的架构

Layer App
Layer Foo
Layer Bar

现在所有层都在不同的包中,但在同一个模块中(我正在寻找一个所有层都可以位于同一个模块中的设置

这里是使用限制

Layer App should only know (and use) Layer Foo and Layer Bar
Layer Foo should only know (and use) Layer Bar
Layer Bar should not know any of the above layers

如何在不创建 3 个不同模块并在 gradle 构建脚本中声明这些依赖项的情况下实现此依赖限制。

【问题讨论】:

标签: java android architecture dependencies


【解决方案1】:

虽然不是万无一失,但你可以做这样的事情来帮助控制事情:

为每个层声明一个类,代表该层的 API(例如 Foo)。制作一个通用构造函数,这样它就可以获取任何有效调用层的 API 类的实例。如果你足够勤奋,总是通过 API 类访问层,那么你应该没问题。

例如在伪代码中:

class Foo {

  public Foo<T>(T caller) {
    if caller is App {
      return
    }
    throw new Exception("invalid call to layer")
  }

  ObjA NewObjA()
  int SomeFuncB()
}

class App {

  private Foo foo

  public App<T>(T caller) {
    if caller is Foo or caller is Bar {
      throw new Exception("invalid call to layer")
    }
    foo = new Foo(this)
  }

  ObjC NewObjC()
  int SomeFuncD()
}

您甚至可以从 API 类的每一层内部类中创建类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2016-09-07
    • 2018-12-10
    • 1970-01-01
    • 2020-09-11
    • 2015-06-23
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多