2017-06-05 30 views
0

MVVM pattern上,ViewModel包含業務邏輯並在需要更新時通知視圖。它也通過有關用戶事件的視圖通知。在Android上使用MVVM時,每個Activity應該有一個(且只有一個)ViewModel?

據我瞭解,每個模型應該有一個關聯的ViewModel。所以,如果我們有以下型號:

  • 用戶
  • 帳戶

我們將有以下的ViewModels:

  • UserViewModel
  • AccountViewModel

但是,我發現有關使用MVVM進行數據綁定的所有示例,都使用單個ViewModel進行佈局。最近,Google在Architecture Components中引入了ViewModel類。這使我相信的活動將有一個單一的視圖模型,將連接到所有相關型號:

用戶/客戶 - > ActivityViewModel

這變得更加複雜,如果我們認爲RecyclerView的。每個適配器項目可以是一個ViewModel本身,因此帶有RecyclerView的Activity將在列表中包含多個ViewModel,併爲剩餘的視圖內容(假設它們需要來自ViewModel的信息)添加一個主視圖。例如:

enter image description here

在這個例子中,我們有帳戶的ViewModels和一個UserViewModel的列表。這將如何嵌入到單個ActivityViewModel中?

回答

0

用戶和帳戶之間的關係是什麼?如果這些是兩個獨立的,不相關的模型,那麼它們應該各自擁有自己的觀點和觀點模型。請記住單一責任原則:每個模塊只應負責您邏輯的一個部分。這樣,對您的域邏輯或模型的任何更改只會影響該部分,並且僅影響該部分。

+0

經過更多的考慮,我同意每個模型都應該有自己的ViewModel。但是,我仍然很難有一個View for Model。該活動可能希望呈現多個模型的一部分,並且我們可以將單個視圖與多個ViewModel連接起來。 – fhsilva

1

谷歌建議您使用每View(即,ActivityFragment)(參見https://youtu.be/Ts-uxYiBEQ8?t=8m40s)1 ViewModel,然後將每個ViewModel內可以有多於1種類型的模型。但是,MVVM的原則是每個ViewModel只有1個模型類型,所以Google的演示與以下內容相矛盾:/。我想你必須決定哪種方法更適合你的應用。

關於您提到的列表示例,那不是您如何做的,列表您會使用paging library。您可以在上面鏈接的視頻末尾看到有關如何使用此功能的詳細信息。

相關問題