我有一個使用MVP模式設計的應用程序。但有時我不確定我們所有的實現都堅持MVP最佳實踐。儘管按照本書開展工作並不總是可行的,但我試圖弄清楚哪些應該成爲處理非用戶交互的邏輯。MVP和非用戶交互
例如:
我具有檢測的垂直滾動RecyclerView的偏移。當滾動達到內容高度的20%(粗略)時,我應該彈出一個對話框。現在,我的邏輯將是(僞代碼)
1. Presenter sets View.setVerticalOffsetTriggeringLimit(1000 pixels)
2. View triggers view event and call Presenter.offsetForPopUpReached()
3. Presenter triggers View.showPopUp()
4. pop up is shown
優點和缺點?有沒有更好的方法,同時還有可測試的代碼?系統本身是一個「用戶」,應該使用演示者作爲中間層?
嗯,我可以爭辯。在按下按鈕之後讓演示者更新視圖與滾動1000個像素並觸發事件沒有區別。無論如何,模型始終與視圖分離。這完全是關於測試用例,並讓Actor不一定是人,但應該平等對待UI的一部分。這種事件不僅僅是UI的東西,而是可能(或可能不)與模型相互作用的整個事件鏈。 – shadox
是的,我想,你就在這裏。嘗試在這裏使用'mediator' - 界面,用傳遞給View的RecyclerView抽象滾動事件及其實現。它可以替換爲模擬測試。 –