没有模块的依赖性限制

时间:2018-01-09 15:20:17

标签: java android architecture dependencies

假设有一个像

这样的架构
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构建脚本中声明这些依赖项。

1 个答案:

答案 0 :(得分:0)

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

为表示该层API的每一层声明一个类(例如Foo)。创建一个通用构造函数,这样,它需要任何有效调用层的API类的实例。如果你那么勤奋,总是通过API类访问图层,那么你应该没问题。

e.g。在 伪代码

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类的每个层内部类创建类。