【问题标题】:Android MVP - should an Activity be a View or Presenter?Android MVP - Activity 应该是 View 还是 Presenter?
【发布时间】:2014-07-24 09:54:36
【问题描述】:

我想用 MVP 模式实现我的下一个应用程序,所以我开始阅读一些关于如何实现它的文章。对我来说,主要问题是这种模式有不同的方法。有人说我们应该将活动视为一种视图,而另一些人则认为活动应该是一个演示者。

此处描述了作为视图的活动:MVP Android 这是有道理的。但另一方面,我通过https://stackoverflow.com/a/7609943 的一些赞成票找到了这个答案,有人说活动应该是演示者。

有人对这种模式有经验吗?

【问题讨论】:

    标签: android design-patterns mvp


    【解决方案1】:

    经过片刻的思考,我认为 Activity 应该被视为一个视图。如果我们将业务逻辑与活动分开,那么用片段或视图替换活动将很容易。我们甚至可以使用我们的模型和演示者并在桌面应用程序中使用它们,只需向它们添加新视图。出于测试目的,将演示者创建为普通对象而不是活动也更好。

    【讨论】:

      【解决方案2】:

      Activity 非常接近您的布局,因此它应该是一个视图。并且您的业务逻辑应该在您的 Activity 创建的 Presenter 中。 要了解有关 MVP 的更多信息,请查看 - MVP for android

      【讨论】:

        【解决方案3】:

        我认为将 Activity 视为 Presenter 是安全的。 View 可以被认为是布局 XML 文件。如您在上面发布的答案中所述,演示者与模型和视图有直接联系。在 Activity 中,您连接到 View(s),并作为 View(s) 和 Model(s) 之间的中介,这实际上是 Presenter 的功能。它从 View(s) 获取输入事件,并将从 Model(s) 接收到的值设置为显示在 View(s) 中。

        【讨论】:

        • View 不建议底层实现细节。视图只是一种可以通过多种方式实现的抽象(GWT 视图、模拟视图、基于 Android 的视图)。我真的认为 Android 中的 Activity 更接近于 View,因为 Activity 倾向于了解实现细节(底层布局 XML 等)。在单元测试中,将 Presenter 作为一个 Activity,将您与 Android 环境紧密绑定,而独立的与视图层无关的 Presenter 提供了更大的灵活性(您可以通过这种方式使用 mvn test 轻松测试您的 Presenter)。
        • 那么作为演讲者你有什么建议?
        • 正如我上面所说的,演示者应该是一个与视图层无关的中间人。例如,它可以是一个简单的类,在最简单的情况下通过接口引用模型和视图,并且可以指示模型和视图之间的交互和工作流。假设你有这样一个可以在不同环境中轻松重用的 Presenter:Android、GWT 等。
        【解决方案4】:

        查看 G+ 社区 Android MVP,尤其是示例 https://github.com/spengilley/ActivityFragmentMVP

        这是一种被动视图模式实现,最适合在测试中使用。

        【讨论】:

          【解决方案5】:

          Activity 应该是视图,因为它是渲染图形的地方。演示者和模型可以用纯 Java 编写,并且易于测试。

          查看这个 AndroidMvc/Mvp 框架

          https://github.com/kejunxia/AndroidMvc

          还可以在此处查看 MVP 示例 https://github.com/kejunxia/AndroidMvc/tree/master/samples/simple-mvp

          【讨论】:

            【解决方案6】:

            View 一词在这里被重载,android view 与 MVP 模式中应该使用的 view 不同。 View 是一个应该由 Activity / Fragment 实现的接口。你可以去Official Android MVP Examples看看。

            我建议从basic one 开始。这是来自页面的流程。

            【讨论】:

            • 由于您引用的文档“在此版本的应用程序中,Activity 是创建和连接视图和演示者的整体控制器。”
            【解决方案7】:

            在决定活动应该是视图还是演示者组件时,我们必须遵循单一职责原则。

            几乎不可能将业务逻辑与活动分开。这样做的一个重要原因是

            Activity 扩展了上下文。

            从功能上讲,上下文对象提供对第三方应用程序可以使用的大多数平台功能的访问。

            由于 Activity 是 Context 的子类,我们的应用程序使用它的 API 来控制平台的部分功能和资源。而使用这些特性和资源的逻辑就是我们的业务逻辑。因此,无论我们如何努力,我们都无法将业务逻辑与活动完全分离。

            由于我们无法将业务逻辑与活动分离,因此我们将所有 UI 逻辑与其分离。这不是一项微不足道的任务,但从长远来看,这是非常值得的。

            【讨论】:

            • 您至少应该提及您复制此内容的文章。这是link
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多