我正在开发一个实现MVP和清洁架构的Android应用程序。我有以下情况:
目前strings.xml文件位于app模块中,但我想是否应该在commons模块中。问题是,有时,演示者必须将文本设置为视图,因此演示者应该需要访问strings.xml。我考虑过两种可能的解决方案:
1)在核心模块上创建一个TextHelper接口,该接口将在app模块上实现并注入到演示者,因此演示者将使用此帮助程序获取所需的字符串。 (这是我实施的解决方案。)
2)将strings.xml文件移动到公共模块,以便可以从核心模块访问该文件。但是这个解决方案会有一个问题:演示者没有上下文。
你怎么看?什么是最好的方法?提前致谢
答案 0 :(得分:1)
如果您的视图嵌套了与字符串相关的if
/ else
,那么它们应该进行单元测试。因此,该逻辑应保留在演示者或用例中,以便更快地进行测试。
你的问题是如何检索实际的字符串,因为它们位于"外层"清洁体系结构方案,即在Context对象中。恕我直言你的TextHelper
是正确的方法,因为它允许在编写单元测试时注入模拟:你对字符串处理的方式感兴趣,而不是字符串实际上如何看。我正在尝试一种非常类似的方法并将其称为StringsRepository
。
存储器API的外观应该是这样的:
getString(@StringRes int stringResId, Object... formatArgs)
一样简单地包装Context.getString()
的单一方法:实现起来非常简单,但会让演示者依赖于您的R.string
类,而后者又需要strings.xml
与您正在测试的代码位于同一模块中; protected
可见性的方法。您案件的最佳选择是(2)或(3),但您的里程可能会有所不同。
答案 1 :(得分:-2)
您可以使用Application
类从应用中获取任何位置的上下文。
public class MVPApplication extends Application {
private static Context context;
public static Context getContext() {
return context;
}
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}