首页 > 解决方案 > 在 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 模式中可以吗?有更好的方法吗?

标签: androidandroid-contextandroid-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
        }
    }

}


推荐阅读