2012-09-05 57 views
11

問題:真正的大和令人費解的活動類。很難閱讀/理解和修改。很難測試。模型 - 查看 - 演示者和Android應用程序設計

可能的解決方案:Model-View-Presenter(可能帶有依賴注入)。 和模擬測試對象!

我正計劃在Android應用程序中實現Model-View-Presenter。 這基本上是模型 - 視圖 - 控制器的變體。實質上,使活動 成爲榮耀的佈局管理器,並將任何業務邏輯推遲給演示者。查看Presenter的另一種方式是它像一個在一個Activity中實例化的Helper類,通過提供Presenter可以使用的接口/回調的活動來完成繁重的工作。

我想得到一些社區的想法。例如: 這意味着什麼接口?
模型和視圖對主持人有什麼責任。

對於主持人,我想活動將落實演示所需的接口?
演示者與活動應該包含哪些內容?

演示者與活動是否是一對一的?怎麼樣一個活動與多個片段顯示不同的小工具,每個都有自己的適配器?我們現在需要多個演示者還是隻有一個?

Presenter vs. Adapter怎麼樣?

演示如何應涉及與說一個ListView和ListViewAdapter的活動? Presenter vs. Adapter的含義是什麼?
演示者應該選擇適配器使用?還是應該活動做出這個決定? 演示者應該處理模型數據還是適配器?適配器和演示者之間是否存在衝突?適配器是否爲演示者?或更少/更多。通常,適配器只適用於活動中的ListView等小部件。他們不會讓我認爲能夠獲得數據的調用。

所以在模型 - 視圖 - 演示的關鍵是真的決定在主持人與其他類,哪些通信應該是主持人和活動,適配器和意見/包括片段之間發生的事情。

Model-View-Presenter對於Android來說只是一個非常糟糕的主意?還是它適合Android框架?

記住有安卓之外的例子不勝枚舉非常成熟SDK的仍然需要一個微架構像MVP的。事實上例子比比皆是:例如。 Flex是非常成熟的Flash SDK,但它仍然需要幾乎所有主流應用程序的MVP和MVC框架。

EJB需要Spring來簡化和組織它。 MFC/Struts等等,並且列表繼續。爲什麼Android應該有什麼不同?爲什麼我們應該假設SDK沒有像MVP這樣的設計模式,就擁有了Android所需的一切?

很高興知道我花這幾百個小時前,請隨時發表評論,這個問題的任何部分/答案。

+1

意見任何人?給予好評? downvote?註釋?答案? .......... –

+1

看到這個額外... http://programmers.stackexchange.com/questions/133134/is-model-view-presenter-mvp-scheme-useful-for-android – nawfal

回答

3

Android的懲罰差的MV(P | C)設計,比我一生中遇到的任何平臺的更多。忘記它提供的用於在活動堆棧上下傳遞狀態的笨拙方法。儘可能多地從你的活動中獲取狀態和邏輯。根據需要將其轉移到Services,ContentProviders和SharedPreferences中。儘量讓你的活動看起來純粹。國際海事組織,服務從未在Android教程中得到足夠的重視。即使O'Reilly 編程Android本書也只給了他們四分之一頁!

警惕擴展應用。如果您曾在自己的過程中啓動服務(例如,在活動崩潰時允許它正常關閉),那麼服務將擁有自己的應用程序副本。

2

只是爲他人提供誰可能感興趣的參考。幾年前我也在想同樣的事情。當我們運用MVC/MVVM/Presentation Model到Android應用程序,我們真正想要的是有一個清晰的結構化項目和單元測試更重要的是容易。目前,如果沒有第三方框架,通常會有很多代碼(如addXXListener(),findViewById()...),它不會增加任何業務價值。更重要的是,你必須運行android單元測試,而不是正常的JUnit測試,這需要很長時間才能運行,並使單元測試有點不切實際。由於這些原因,幾年前我們開始了一個開源項目RoboBinding - Android平臺的數據綁定演示模型框架。 RoboBinding可幫助您編寫易於閱讀,測試和維護的UI代碼。 RoboBinding刪除的像addXXListener左右不必要代碼的需要,並轉移UI邏輯來呈現模型,這是一個POJO並且可以經由正常JUnit測試進行測試。 RoboBinding本身帶有超過300個JUnit測試來確保其質量。其他選擇:Android綁定,Bindroid和MvvmCross。

相關問題