在Android,Presenter或Activity的Model-View-Presenter中,切换视图可见性的逻辑应该放在哪里?

时间:2019-12-19 23:51:30

标签: android mvp

我正在使用Kotlin编程语言开发一个Android应用程序。我开始在我的应用程序中使用Model-View-Presenter模式。老实说,这是我第一次使用MVP模式,即使我从事Android开发已经有一段时间了。现在,我正在努力遵循模式的最佳实践和标准。

这是我当前正在开发的功能。一个非常简单且基本的功能。

应用程序将更新文本视图。更新文本视图时,字符串(消息)将作为参数传递给函数。在函数内部,如果字符串为空,它将隐藏文本视图。否则,它将再次显示文本视图。我的挣扎是我不太确定如何实现适合MVP模式的代码。尤其是切换文本视图可见性状态的逻辑。

这是我的演示者类LoginActivityPresenter的当前签名

class LoginActivityPresenter(viewArg: View)
{
    private var view:View = viewArg

    interface View
    {
        fun updateErrorMessageTextView(message: String)
    }
}

我在想的是,活动类将实现LoginActivityPresenter.View并提供updateErrorMessageTextView方法的实现。因此,在活动中,在一个功能内,它将执行以下任务。

它将检查字符串是否为空。如果是,它将隐藏视图。否则,它将显示视图(后退)。然后它将设置带有消息的文本视图。由于上述presenter类的签名,所有活动类都包含在内。

我正在考虑实现LoginActivityPresenter类的另一种方法如下。

class LoginActivityPresenter(viewArg: View)
{
    private var view:View = viewArg

    fun updateErrorMessage(message: String) {
        if (message.isNullOrEmpty()) {
            this.view.hideErrorTextView()
            return
        }

        this.view.showErrorTextView()
        this.view.updateErrorMessageTextView(message)
    }

    interface View
    {
        fun updateErrorMessageTextView(message: String)

        fun showErrorTextView()

        fun hideErrorTextView()
    }
}

因此,在第二个实现中,presenter类将根据字符串值处理显示或隐藏视图的逻辑,而不是由活动类处理逻辑。

我的问题是哪种方法最适合MVP模式,为什么?

0 个答案:

没有答案