【问题标题】:Is it a bad practice to have Context in MVP Model's constructor parameter?在 MVP 模型的构造函数参数中包含 Context 是一种不好的做法吗?
【发布时间】:2019-03-20 09:31:31
【问题描述】:

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


    【解决方案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
            }
        }
    

    }

    【讨论】:

      【解决方案2】:

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

      上下文是 MVP 中 Android View Layer 的一部分,所以 Presenter 不应该对此有任何想法,也不应该将其传递给 演示者交互者

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

      【讨论】:

        猜你喜欢
        • 2018-11-15
        • 2019-10-30
        • 2017-05-06
        • 2014-11-01
        • 1970-01-01
        • 2013-03-31
        • 2014-08-15
        • 2015-07-10
        相关资源
        最近更新 更多