繁体   English   中英

Android中的MVP实施

[英]MVP Implementation in Android

我正在研究Android中的MVP架构实现。 我在Android Studio中发现了太多实现问题的方法(问题的提法结尾),但我仍然感到困惑。

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

  • MVP中Application的目录结构是什么?
  • 活动应该是Presenter还是View?

方式1

方式2

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

  • 没有预定义的结构。 是什么使您的代码易于阅读或遵循的结构,也可以将其用于MVP。

活动应该是Presenter还是View?

  • 视图是UI层,用于显示数据并通知Presenter用户操作。 因此,Activity将永远是一个视图。

如果您正在寻找实现MVP的一个很好的例子,那么有一个Android本身为MVP开发的GitHub Repo 您应该研究的。

哪里

待办事项

  • 演示了基本的Model-View-Presenter(MVP)体系结构,并提供了构建其他示例的基础。 该样本还可以作为比较和对比此项目中其他样本的参考点。

todo‑mvp‑clean

  • 使用Clean Architecture中的概念。

todo‑mvp‑匕首

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

todo‑mvp‑rxjava

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

todo‑mvvm‑数据绑定

  • 基于todo-databinding示例,此版本合并了Model‑View‑ViewModel模式。

todo‑mvvm‑live

  • 在架构组件中使用ViewModels和LiveData,在MVVM架构中使用数据绑定库。

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

  1. 关注点分离
  2. 可测试性:如果不涉及android组件,则可以测试您的业务逻辑。

关于您的问题:

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

除应识别您的MVP组件外,没有其他规则。 在这里,您有一篇文章是从包结构开始的,但后来我发现其他更方便的了。

活动应该是Presenter还是View?

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

我的建议是,您应该检查多个示例,并查看每个示例的优缺点,并尝试从您会更喜欢的示例中定义自己的体系结构。

您可以将“ Activity或“ Fragment用于“ 视图”层。 这是因为在android中显示UI元素需要Context

对于Presenter层,必须确保不要通过构造函数或setter将Context传递给Presenter 如果您在Presenter中需要Context来执行除显示UI之外的任务,例如写入SharedPreferences ,则可以从View (为ActivityFragment )中获取它。 这样,如果View被破坏或变为null ,则Presenter中将没有独立的null Context导致泄漏问题。

如果您想了解更多有关MVP结构的信息,我已经为Android编写了一个非常方便的MVP库 ,并在此处的示例应用程序中说明了其用法。

MVP android示例示例应用程序 MVP Android Example用来解释如何在我们的Android应用程序中使用此模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM