android - 在 MVP 模型的构造函数参数中包含 Context 是一种不好的做法吗?
问题描述
我正在尝试使用 MVP 模式检查互联网连接。为此,我有一个MyAppUtil
接受Context
其构造函数的类。这是我的 MVP 模型类,我正在使用以下方法检查互联网连接MyAppUtil.checkConnection(context)
:
public class MainActivityInterectorImpl implements MainActivityContract.IInterector{
Context context;
MainActivityInterectorImpl(Context context) {
this.context = context;
}
@Override
public void getData(OnFinishedListener onFinishedListener) {
boolean result = MyAppUtil.checkConnection(context);
if (result == true) {
onFinishedListener.onSuccess();
} else {
onFinishedListener.onFailure();
}
}
}
在 VIEW 中,我正在通过以下方式初始化演示者:
presenter = new MainActivityPresenterImpl(this, new MainActivityInterectorImpl(this));
如您所见,我正在使用Context
内部 MVP 模型。这在 MVP 模式中可以吗?有更好的方法吗?
解决方案
是的,这是不好的做法。制作连接检查器或类似东西的包装器,然后将其传递给模型或演示者。
它应该看起来像这样:
class ConnectionChecker(private val context: Context) {
val isOnline: Boolean
get() {
return try {
val connectivityManager = context.getSystemService(
Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.activeNetworkInfo != null &&
connectivityManager.activeNetworkInfo.isConnected
} catch (exception: Exception) {
false
}
}
}
推荐阅读
- javascript - 为什么我的 JavaScript setter 没有按预期更改对象属性?
- c# - 显示连接的wifi密码C#
- javascript - 是否有可能从 async/await 获得“进行中”响应,然后在等待完成之前使用它来显示服务器当前正在做什么?
- react-native - 如何在本机反应中将数据json显示到表中
- laravel - Laravel 5.8 pusher 私有频道返回 403 禁止错误
- ms-word - Office.js ContextMenu,点击了什么?
- python - 在团队之间共享 PYTHONPATH
- sql - 如何使用条件聚合进行多项选择
- jenkins - 如何在詹金斯自由式项目中使用从代理名称作为参数
- reactjs - 基于 API 调用将获取的资源添加到已知资源