mvp 是從經典的模式mvc演變而來,它們的基本思想有相通的地方:controller/presenter負責邏輯的處理,model提供資料,view負責顯示。作為一種新的模式,
mvp與mvc有著乙個重大的區別:
在mvp中view並不直接使用model,它們之間的通訊是通過presenter (mvc中的controller)來進行的,所有的互動都發生在presenter內部,而在mvc中view會從直接model中讀取資料而不是通過 controller。
在mvc裡,view是可以直接訪問model的!從而,view裡會包含model資訊,不可避免的還要包括一些業務邏輯。 在mvc模型裡,更關注的model的不變,而同時有多個對model的不同顯示,及view。所以,在mvc模型裡,model不依賴於view,但是view是依賴於model的。不僅如此,因為有一些業務邏輯在view裡實現了,導致要更改view也是比較困難的,至少那些業務邏輯是無法重用的。
在mvp裡,presenter完全把model和view進行了分離,主要的程式邏輯在presenter裡實現。而且,presenter與具體的view是沒有直接關聯的,而是通過定義好的介面進行互動,從而使得在變更view時候可以保持presenter的不變,即重用!
不僅如此,我們還可以編寫測試用的view,模擬使用者的各種操作,從而實現對presenter的測試--而不需要使用自動化的測試工具。 我們甚至可以在model和view都沒有完成時候,就可以通過編寫mock object(即實現了model和view的介面,但沒有具體的內容的)來測試presenter的邏輯。 在mvp裡,應用程式的邏輯主要在presenter來實現,其中的view是很薄的一層。因此就有人提出了presenter first的設計模式,就是根據user story來首先設計和開發presenter。
在這個過程中,view是很簡單的,能夠把資訊顯示清楚就可以了。在後面,根據需要再隨便更改view,而對presenter沒有任何的影響了。 如果要實現的ui比較複雜,而且相關的顯示邏輯還跟model有關係,就可以在view和presenter之間放置乙個adapter。由這個 adapter來訪問model和view,避免兩者之間的關聯。而同時,因為adapter實現了view的介面,從而可以保證與presenter之間介面的不變。這樣就可以保證view和presenter之間介面的簡潔,又不失去ui的靈活性。 在mvp模式裡,view只應該有簡單的set/get的方法,使用者輸入和設定介面顯示的內容,除此就不應該有更多的內容,絕不容許直接訪問model--這就是與mvc很大的不同之處。
1、模型與檢視完全分離,我們可以修改檢視而不影響模型
2、可以更高效地使用模型,因為所有的互動都發生在乙個地方——presenter內部
3、我們可以將乙個presenter用於多個檢視,而不需要改變presenter的邏輯。這個特性非常的有用,因為檢視的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在presenter中,那麼我們就可以脫離使用者介面來測試這些邏輯(單元測試)
由於對檢視的渲染放在了presenter中,所以檢視和presenter的互動會過於頻繁。還有一點需要明白,如果presenter過多地渲染了檢視,往往會使得它與特定的檢視的聯絡過於緊密。一旦檢視需要變更,那麼presenter也需要變更了。比如說,原本用來呈現html的presenter現在也需要用於呈現pdf了,那麼檢視很有可能也需要變更。
MVP模式入門
一 什麼是mvp?mvp 全稱 model view presenter mvp 是從經典的模式mvc演變而來,它們的基本思想有相通的 地方 controller presenter負責邏輯的處理,model提供資料,view負責顯示。model 資料層,和mvc中的m一樣,用來放資料的處理 比如網...
MVP設計模式
建立ipresenter介面,把所有業務邏輯的介面都放在這裡,並建立它的實現presentercompl 在這裡可以方便地檢視業務功能,由於介面可以有多種實現所以也方便寫單元測試 建立iview介面,把所有檢視邏輯的介面都放在這裡,其實現類是當前的activity fragment activity...
嘗試MVP模式
mvp 是從經典的模式mvc演變而來的,難怪看那個結構圖有點相像。mvc模式的結構圖,m,v,c各代表什麼不說了 mvp模式的結構圖,m和v的含義跟mvc中的結構一樣,區別的就是c controller 和p presenter 感覺這個區別就導致了模式產生性質的變化。至少從幾何角度來看,由乙個穩定...