在Model层中,我有一个DataManager
类来处理所有的Retrofit调用。
改进方法需要{path}
个参数,因为我将所有REST端点作为字符串资源存储在单独的xml文件中(用于.gitignore目的)。
因此,如果我不想将Context
传递给模型和Presenter图层(并执行context.getString
),我该如何获取并传递这些参数?
答案 0 :(得分:1)
最好的方法是使用依赖注入,使用像" Dagger 2"或借助于依赖倒置。
做第一种方式你可以参考这个链接:(这种方式需要更多的代码和时间,但最好的做法 - 最推荐在mvp架构中使用 - 学习有点复杂)
http://www.vogella.com/tutorials/Dagger/article.html
做第二种方式,如下所示:(少代码有点脏 - 如果你不想使用匕首,请使用它)
提供这种类型的变量需要一些来自android而不是纯java的东西,你可以创建一个接口类并添加一些提供你需求的方法。代码将是这样的:
public interface Provider {
public String providePath();
}
假设您的模型和演示者位于单独的纯Java模块中,您必须将此接口添加到模块以防止循环依赖。然后你在android类中实现这个接口,并在每次调用时将它发送给你的演示者。
public class ProviderImpl implements Provider {
private Context ctx;
public ProviderImpl(final Context ctx) {
this.ctx = ctx;
}
@Override
public string providePath() {
//provide the path from resources
}
}
使用这种方式,您可以将每个新需求作为方法添加到您的Provider界面并在演示者中使用它。 您必须在演示者中获取Provider变量作为参数。
我会使用DAGGER MYSELF,因为这是更清洁和最好的做法。