【问题标题】:Does every view have to have presenter in MVP pattern?每个视图都必须有 MVP 模式的演示者吗?
【发布时间】:2020-04-07 15:01:58
【问题描述】:

我正在使用 MVP 模式开发一个小型应用程序。我的 home Activity 有 viewpager,里面有多个 Fragment,每个 Fragment 都有自己的 Presenter。片段不相互通信,因此活动没有任何逻辑,它只是在开始时初始化片段。 因此,如果我想按本书实施该模式并忠于其原则,我是否也应该为该活动实施演示者?如果是这样,它的作用应该是什么?

【问题讨论】:

  • MVP 是一种模式,您可以根据需要对其进行调整。如果没有与您的活动进行演示交互,您可以避免它。无论如何,我建议您考虑使用 MVVM。你会得到很多样板代码,这是现在的标准。

标签: android mvp android-mvvm android-mvp


【解决方案1】:

如果您想按本书实现 MVP 并忠于其原则,那么每个具有用户交互的 UI 都应该有一个演示者。在这种情况下,如果您的活动不与用户交互,则不需要演示者,您的片段可以有自己的。如果您的活动需要,假设由于在显示片段之前加载了一些数据而向用户显示加载(这是用户交互,因为您正在与用户交互以让他们知道正在发生某些事情,因此他们应该等待),那么最好考虑为活动安排一名演示者。

MVP 根本不关心是否是 Activity/Fragment/View,它只知道 View 被认为是可以向用户显示的任何内容的抽象 :)

至少从“规则”的角度来看是这样。我的 2 美分是,灵活一点,如果你发现它实际上最终为你和你的项目增加了价值,那就去做吧,否则,有时你必须“打破”规则或创建自己的规则。

【讨论】:

    【解决方案2】:

    为了将 Fragment 与他们自己的 Presenter 一起使用,我尝试使用 presenter-contract 类 duo 来管理 Fragment 中的 UI 事件。

    例如,考虑一个点击事件以在两种可能结果的情况下显示一个 toast 消息:1.保存并 2. 删除

    然后,我将声明两个视图合约方法,如下所示:

    interface View{
         fun showSaveMessage()
         fun showDeleteMessage()
    }
    

    然后,在片段中,我将使用演示者类的实例在适当的时间显示消息,例如:presenter.doSaveAction(),然后演示者将导致视图显示 toast 消息。

    另外,当我谈到片段的实际逻辑时,比如从远程服务器获取一些数据,我使用 Interactor 类和 Presenter-View 类来执行它。

    我相信坚持所有原则实际上取决于您要构建的应用程序类型。有时,在应用架构中使用 MVVM 和 MVP 比仅使用 MVP 模式更可行。

    我希望这能回答你的问题,是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2011-02-25
      • 2012-07-03
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多