繁体   English   中英

Android上的嵌套MVP:如何

[英]Nested MVP on Android: how to

我正在开发一个由3个主要部分组成的Android测试项目,每个部分都是按照MVP模式开发的。 这些部分互相嵌套 ,我想知道我所遵循的策略是否正确/最好

结构体:

  • :ViewPager包含不同的页面
  • Page :自定义LinearLayout包含多个项目
  • 项目 :自定义视图(在此示例中为简单按钮)

每个部分都使用MVP结构(例如,对于Book I制作了BookPresenter,BookView和BookModel,对于Page和Item也是如此)

作为用户案例,我想跟踪用户点击按钮的次数,并且每次将页面背景更改为随机颜色,当用户到达第10次点击时,告诉BookPresenter转到第二页。

为此我设置了这样的东西

  • BookView创建BookPresenter,它反过来创建每个PageView。
  • 每个PageView创建PagePresenter,然后创建ItemView(最终创建ItemPresenter)

在所有这些中,BookPresenter具有对PagePresenter的引用,并且PagePresenter具有对ItemPresenter的引用,因此当需要执行某些操作时,它们可以与结构中的子或父呈现器进行通信。

现在的问题这是建立具有嵌套MVP的系统的正确方法吗? 因为如果我想要一个PageView而不是在Book中我需要将它放在一个Newspaper(其他具有Book的替代行为的类)中,我仍然需要使用Presenters和其他所有其他类重新创建依赖关系链。 ...

“儿童主持人”如何与其“家长 - 主持人”进行沟通? 他们不(直接,不通过EventBus)

从我的观点来看,这样的父子关系是代码味道,因为它们引入了父和子之间的直接耦合,这导致代码难以阅读,难以维护,需求的变化会影响很多组件(因此它是在大型系统中几乎不可能完成任务),最后但并非最不重要的是引入了难以预测的共享状态,甚至更难以重现和调试。

到目前为止这么好,但不知何故,信息必须从Presenter A流向Presenter B:Presenter如何与另一个Presenter通信? 他们没有! 演示者必须告诉另一位演示者? 事件X发生了什么? 演示者不必彼此交谈,他们只是观察相同的模型(或者精确的业务逻辑的相同部分)。 这就是他们如何获得有关变化的通知:来自底层。

逻辑1

每当事件X发生时(即用户单击视图1中的按钮),Presenter就会让信息下沉到业务逻辑。 由于其他演示者正在观察相同的业务逻辑,因此业务逻辑会通知事情已发生变化(模型已更新)。

逻辑2

来源: http//hannesdorfmann.com/android/mosby3-mvi-4

所以让我们在你的例子中应用它。 你应该有像Readable这样的东西(如果你想对Book implements Readable而抽象,而NewsPaper implements Readable )。 使用Readable.getPageCount()可以获得ViewPager的页数。 使用Readable.getCurrentPage()可以获得当前Page 然后,您需要某种观察者模式,以便在页面更改时得到通知。 当用户单击ItemView中的按钮时,您还需要一个Listener / Observer模式。 这样的点击将是上图中的事件X. 单击该按钮,您可以让信息通过Presenter向下流向您的业务逻辑,从而更改Readable对象。 然后,此更改将通知观察者此PagePresenterReadable对象,然后更新PageView以设置页面的背景颜色。

所以关键是:通过业务逻辑进行通信,而不是一些View to View或Presenter to Presenter通信。

希望有所帮助。

暂无
暂无

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

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