Android中的MVP实现

时间:2017-12-19 10:09:59

标签: android design-patterns mvp android-mvp

我正在研究Android中的MVP架构实现。 我找到了太多的方法(提到问题的结尾)在android工作室中实现它,但是,我很困惑。

有人可以帮我找到以下问题的正确答案。

  • MVP中Application的目录结构是什么?
  • 活动应该是演示者还是视图?

Way-1

Way-2

4 个答案:

答案 0 :(得分:3)

  

MVP中Application的目录结构是什么?

  • 没有预定义的结构。是什么让你的代码可读或你正在遵循什么结构,你也可以使用相同的MVP。
  

活动应该是演示者还是视图?

  • View是显示数据的UI层,并通知Presenter有关用户操作的信息。所以活动永远都是一种观点。

如果您正在寻找一个MVP实现的好例子,那么Android本身就有一个GitHub Repo用于MVP。你应该研究一下。

哪里

todo‑mvp

  • 演示基本的模型 - 视图 - 展示器(MVP)架构,并提供构建其他示例的基础。此示例还可作为比较和对比此项目中其他样本的参考点。

todo‑mvp‑clean

  • 使用Clean Architecture中的概念。

todo‑mvp‑dagger

  • 使用Dagger 2添加对依赖注入的支持。

todo‑mvp‑rxjava

  • 使用RxJava 2实现并发,并抽象数据层。

todo‑mvvm‑databinding

  • 基于todo-databinding样本,此版本包含Model-View-ViewModel模式。

todo‑mvvm‑live

  • 使用来自Architecture Components的ViewModels和LiveData以及带有MVVM架构的Data Binding库。

答案 1 :(得分:1)

尽管MVP体系结构有很多实现,但它们都有一个基本的想法(或者至少应该是这样),这将业务逻辑与您的视图(活动,片段,对话框)分开。这是为什么?那么,主要有两个原因:

  1. which triggers the end event for process.stdin
  2. 可测试性:如果没有涉及Android组件,则可以测试您的业务逻辑。
  3. 关于您的问题:

    MVP中Application的目录结构是什么?

    除了应该识别您的MVP组件之外,没有任何规则。 separation of concerns你有一篇文章,我从一个包结构开始,然后我发现其他更方便。

    活动应该是演示者还是视图?

    您的活动(或片段或负责显示视图组件的任何组件)应该是实现您的视图的活动。

    我的建议是,您应该检查多个示例并查看每个示例的优缺点,并尝试从您感觉更舒服的那些定义您自己的架构。

答案 2 :(得分:1)

您可以使用ActivityFragment进行查看图层。这是因为在android中显示UI元素需要Context

对于 Presenter 图层,您必须确保不要通过构造函数或setter将Context传递给 Presenter 。如果您的演示者中需要Context用于显示用户界面以外的其他任务,例如写入SharedPreferences,则可以从查看获取(可以是ActivityFragment)。这样,如果 View 被销毁或变为null,Presenter中就不会出现独立的null Context来导致泄漏问题。

如果你想了解更多有关MVP结构的信息,我已经为android编写了一个非常方便的MVP library,并解释了它在示例应用here中的使用。

答案 3 :(得分:0)

MVP android sample example application MVP Android示例用于解释如何在我们的Android应用程序中使用此模式。