在MVP Model的构造函数参数中包含Context是一种不好的做法吗?

时间:2019-03-20 09:31:32

标签: android android-context android-mvp

我正在尝试使用MVP模式检查互联网连接。为此,我有一个类a : 3 b : 2 c : 1 ,它的构造函数中包含MyAppUtil。这是我的MVP模型课程,我正在其中使用Context来检查Internet连接:

MyAppUtil.checkConnection(context)

在VIEW内部,我通过以下方式初始化演示者:

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();
    }
}
}

如您所见,我在MVP模型中使用presenter = new MainActivityPresenterImpl(this, new MainActivityInterectorImpl(this)); 。 MVP模式可以吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,这是不好的做法。制作一个连接检查器或类似内容的包装,然后将其传递给模型或演示者。

它应该看起来像这样:

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
        }
    }

}

答案 1 :(得分:1)

交互器可以从数据库,Web服务或任何其他数据源中获取数据。获取数据后,交互器将数据发送给演示者。因此,在您的UI中进行更改。您还可以将交互器放入您的 Presenter

上下文是MVP中Android 视图层的一部分,因此 Presenter 对此一无所知,也不应将其转移到演示者交互者

您必须将所需的方法添加到 View 界面,并在您的Android View 组件(例如Activity或Fragment)中实现它。