簡體   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