【问题标题】:MVP architecture - some thoughts [closed]MVP架构-一些想法[关闭]
【发布时间】:2017-11-08 06:54:43
【问题描述】:

我正在尝试在我的应用中实现 MVP 模式。

但是,有些任务我不确定如何正确执行。
大多数示例仅涵盖基本任务和简单任务,其中每个交互者只执行一项任务(例如获取用户列表) - 但是,如果任务更复杂,我们应该如何实现它

我们应该如何处理这些任务:

  1. 一个复杂的数据任务,例如涉及 3 个 api 调用 - 获取用户 + 获取用户喜欢 + 获取用户关注者。应该在单个交互器中完成,还是分成3个交互器?

  2. 在从演示者转移到交互者之前,需要将数据存储在某处的任务。
    例如,一个复杂的注册过程 - 用户输入用户名和地址,然后按继续。之后有一系列 X 弹出窗口,用户在其中填写更多数据。最终 - 用户按下注册,演示者触发其交互器。
    现在,在进行注册调用之前的整个过程中,这些注册数据应该保存在哪里?在主持人?在演讲者的专属课堂上?在..Interactor中??

  3. 最后的想法 - 在我看到的所有示例中,交互者与其演示者具有一对一的关系。
    如果登录演示者使用登录交互器进行...登录 ofc。如果我需要在其他屏幕上进行另一个登录调用会发生什么(我知道这并不常见,但只是为了理解主要思想) - 然后我们将有另一个交互器做与前一个相同的事情。 那么interactor是否应该有一对多的关系呢?

很高兴听到你的意见

谢谢!

【问题讨论】:

    标签: android mvp android-mvp


    【解决方案1】:

    回答您的问题:

    1. 我建议使用单独的 API 层来处理您的后台任务。我建议通过 RxJava 公开每个 API 调用,并确保只有 Presenter 可以访问 API。 RxJava 将完成繁重的工作,允许您在应用层/presenters 中将请求组合在一起。
    2. Square 最近就这个和那里的解决方案做了一次演讲。你可以找到它的链接here。归根结底,这不是一个容易解决的问题。如果您正在寻找一个简单的解决方案,我和我的团队创建了一个名为首选项的概念。每个首选项代表存储在内存中或使用共享首选项保存到磁盘的单个数据。 Here is an example of a library we used to do this.这个库使用的是RxJava1,我们私下升级到了RxJava2,不过你能明白。每条数据都是一个依赖项,我们使用依赖注入在演示者/屏幕之间传递,以便将其获取到我们需要的地方。
    3. 无法回答这个问题。我的团队不使用交互器。正如我在 #1 中描述的那样,我们使用了一个分离的 API 层,而 RxJava 允许所有这些调用都非常灵活和可重用。如果你对你在博客中阅读的所有内容都持教条主义的态度,你会让自己发疯。我在博客中读到的很多东西在原则上并不实用。我建议使用常识,找到适合您团队的方法。

    这是对 MVI(模型视图意图)的卖空。我强烈推荐它:

    我的团队最近在大约一年前尝试采用 MVP。没过多久,我们就发现了一些不足之处,并且出现了与您类似的问题。经过一番搜索,我们转向了模型-视图-意图 (MVI)。它与 MVP 非常相似,但有一些关键区别使代码更易于管理,更容易在开发人员之间标准化代码,从而更容易跳转到其他人的代码中。

    几个关键区别:View 不与 Presenter 对话,而是 View 发出 Presenter 订阅的事件,称为 Intents。 Presenter 还通过强大的 View Model 与 View 对话。如果你把它画出来,它最终的功能与 MVVM 非常相似。您最终会得到如下所示的流程:

    1. Presenter 订阅 View 事件/意图。
    2. View 发出事件。
    3. Presenter 接收事件、做出反应并更新模型。
    4. 正在更新的模型会触发对视图的更新
    5. 它转了一圈又一圈。 (如果你把它画出来,它最终会变成一个非常循环的事件)

    Hannes Dorfmann 有几篇我推荐的关于 MVI 的博客文章。他提供了一些相当复杂的例子。我的团队使用 Kotlin,这对此有很大帮助。我们没有遵循 Hannes 所做的一切,但我们从他的博客文章/示例中学到了很多东西,并提炼出对我们团队非常有效的东西。

    1. http://hannesdorfmann.com/android/model-view-intent
    2. http://hannesdorfmann.com/android/mosby3-mvi-1
    3. http://hannesdorfmann.com/android/mosby3-mvi-2
    4. http://hannesdorfmann.com/android/mosby3-mvi-3
    5. http://hannesdorfmann.com/android/mosby3-mvi-4
    6. http://hannesdorfmann.com/android/mosby3-mvi-5
    7. http://hannesdorfmann.com/android/mosby3-mvi-6

    【讨论】:

      【解决方案2】:

      @dor506 在我开始使用 MVP 架构之前,我有过这样的困惑

      我必须关注很多文章、博客和示例项目。在它们之上,这个 repo 是我学习 MVP 的蓝图

      关注repo,希望您能成为开发具有 MVP 架构的 android 应用程序的专家

      【讨论】:

        猜你喜欢
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 2018-04-21
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多