M(Modle)+V(View)+P(Presenter)即舌。
M:數(shù)據(jù)模型層,操作和管理數(shù)據(jù)模型挎袜。
V:視圖層顽聂,操作和管理View
P:連接M和V層,形成M和V層的功能銜接后者通信盯仪。
那么P層是不是應(yīng)該直接持有V層中的頂級(jí)View紊搪?
如果一旦持有,并且嘗試獲取子View全景,那么P層中就可以形成View與數(shù)據(jù)的直接交互耀石,P層就退化層一個(gè)Controller,最終的結(jié)果是:View和Modle一致耦合在一起爸黄,MVP變成了MVP.
正確的設(shè)計(jì)思路是:
思路1:P層持有V層行為的接口IV引用滞伟,而V層實(shí)現(xiàn)該IV揭鳞,這樣P層永遠(yuǎn)通過(guò)IV中的接口去指導(dǎo)V層做事情,向V層傳遞必要的數(shù)據(jù)梆奈,而不是直接操作View汹桦。這樣才能做到真正的隔離。
思路2:持有V層引用鉴裹,并且只使用V層對(duì)外暴露的操作View的接口舞骆,而不是直接操作View。
使用IV接口的好處:便于直觀的看到V層的操作邏輯有哪些径荔。并且在替換新的V層實(shí)現(xiàn)時(shí)督禽,完全不需要更改P層實(shí)現(xiàn)。
那么P層是不是應(yīng)該直接持有M層的引用总处?
可以直接持有狈惫,因?yàn)镸層內(nèi)部已經(jīng)完成了對(duì)于數(shù)據(jù)的細(xì)節(jié)處理,而僅僅使用暴露出來(lái)的接口或者方法鹦马,已經(jīng)具備了解耦性胧谈。也可以設(shè)計(jì)IM接口,好處同IV荸频。