在MVP模型的构造函数参数中使用Context是不好的做法吗?

问题描述 投票:0回答:2

我正在尝试使用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));

如您所见,我在MVP模型中使用Context。 MVP模式可以吗?有更好的方法吗?

android android-context android-mvp
2个回答
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
投票

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

上下文是MVP中Android视图层的一部分,因此Presenter不应该对此有任何了解,也不应将其传输到Presenter或Interactor。

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

© www.soinside.com 2019 - 2024. All rights reserved.