从MVP上查看视图

时间:2018-04-17 01:35:35

标签: android mvp

例如,我有一个按钮,如果用户点击该按钮,则只需拨打finish()。我要告诉主持人点击按钮了吗? :

//--------------HomeView.kt--------------
var presenter: HomePresenter? = null

override fun onCreate(...) {
    btBack.setOnClickListener {
        presenter.onBackPress()
    }
}

private fun onBackPress() {
    finish()
}



//--------------HomePresenter.kt--------------
var view : HomeView? = null

private fun onBackPress() {
    view?.onBackPress()
}

或者我可以简化它只是在其onClickListener()中调用finish()吗? :

//--------------HomeView.kt--------------
override fun onCreate(...) {
    btBack.setOnClickListener {
        finish()
    }
}

2 个答案:

答案 0 :(得分:1)

除非您在完成活动之前需要执行某些逻辑,否则请告诉演示者,否则我没有看到任何优势做到这一点

答案 1 :(得分:1)

与几乎所有架构问题一样,这取决于个人偏好以及您希望代码清洁的程度。

就个人而言,我建议总是在视图上为每个交互调用演示者(即使它们只是一行调用)。

  • 这允许您将所有逻辑移出视图并进入演示者(因为视图上的所有交互都只是将调用直接传递给演示者,而没有任何附加逻辑)
  • 它使您的整个应用程序更加可测试,因为您可以从演示者模拟视图并在那里测试逻辑
  • 它使您的应用程序架构更清晰,因为您始终知道每次交互都会将调用发送给演示者
  • 它使您的代码更具未来性,因为您可以在演示者调用中添加新逻辑,而不必先移动代码(或者更糟:只是懒惰并直接在视图中添加逻辑)

当然,我必须承认它增加了很多样板代码,但我认为这是值得的。