假设有一个像
这样的架构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
构建脚本中声明这些依赖项。
答案 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类的每个层内部类创建类。