在一个Android MVP结构的应用程序中,将字符串资源作为{path}传递给Retrofit调用的“正确”方法是什么?

时间:2016-09-30 09:34:24

标签: android mvp retrofit2

在Model层中,我有一个DataManager类来处理所有的Retrofit调用。

改进方法需要{path}个参数,因为我将所有REST端点作为字符串资源存储在单独的xml文件中(用于.gitignore目的)。

因此,如果我不想将Context传递给模型和Presenter图层(并执行context.getString),我该如何获取并传递这些参数?

1 个答案:

答案 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,因为这是更清洁和最好的做法。