代码之家  ›  专栏  ›  技术社区  ›  Wai Yan Hein

在Android、Presenter或Activity中,切换视图可见性的逻辑应该位于模型视图Presenter中的何处?

  •  0
  • Wai Yan Hein  · 技术社区  · 5 年前

    我正在使用Kotlin编程语言开发一个Android应用程序。我开始在应用程序中使用Model View Presenter模式。老实说,这是我第一次使用MVP模式,尽管我已经做了很长时间的Android开发。现在,我有点难以遵循该模式的最佳实践和标准。

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

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

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

    class LoginActivityPresenter(viewArg: View)
    {
        private var view:View = viewArg
    
        interface View
        {
            fun updateErrorMessageTextView(message: String)
        }
    }
    

    我认为activity类将实现LoginActivityPresenter。查看并提供updateErrorMessageTextView方法的实现。因此,在活动中,在一个函数中,它将执行以下任务。

    它将检查字符串是否为空。如果是,它将隐藏视图。否则,它将显示视图(返回)。然后,它将设置带有消息的文本视图。由于上面的演示者类签名,所有内容都在活动类中。

    另一种实现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类将根据字符串值处理显示或隐藏视图的逻辑,而不是activity类正在处理的逻辑。

    我的问题是,对于MVP模式,哪种方法更合适、更标准,为什么?

    0 回复  |  直到 5 年前