2016-11-08 105 views
10

我們公司一直在使用MVP模式開發Android應用程序。使用MVP,我們將所有業務邏輯放在演示者和活動/片段內,然後在從演示者接收事件回調時負責視圖更新。MVVM中的Activity/Fragment和ViewModel應該做些什麼

現在,我們決定嘗試使用Android Databinding的MVVM。看起來,通過MVVM,我們可以將所有業務邏輯放入ViewModel中(就像MVP中的Presenter一樣),並且還可以在一個對象中通知視圖(數據模型的任何更改)。

但是,這在我們腦海中提出了問題,我們應該留給活動/片段來處理什麼?由於我們採用MVP模式來避免脂肪活動/片段。我們不希望有苗條活動/片段,然後胖視圖模型

我們認爲我們可以留下來是由活動處理/片段至今

  • 請求/檢查許可
  • 訪問上下文
  • 訪問資源

每校,註釋或建議值得歡迎,因爲我對MVVM相當陌生,即使它看起來與MVP相似。

謝謝。

多一點的問題

是否有可能和好的做法MVVM與聽者(如MVP)相結合?例如

public class MainActivityViewModel extends BaseObservable { 

    MainActivityViewModelListener listener; 
    User user; 

    public void setMainActivityViewModelListener(MainActivityViewModelListener listener) { 
     this.listener = listener; 
    } 

    public void refreshUser(View v) { 
     // some user update via Internet 
     notifyPropertyChanged(BR.userAlias); 

     if (listener != null) { 
      listener.onUserRefreshed(user); 
     } 
    } 

    @Bindable 
    public void getUserAlias() { 
     return user.getAlias(); 
    } 
} 

public interface MainActivityViewModelListener { 
    void onUserRefreshed(User user); 
} 

public class MainActivity implements MainActivityViewModelListener { 

    MainActivityBinding binding; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     binding = DataBindingUtil.setContentView(R.layout.main_activity); 


     MainActivityViewModel viewModel = new MainActivityViewModel(); 
     viewModel.setMainActivityViewModelListener(this); 
     binding.setMainActivityViewModel(viewModel); 
    } 

    @Override 
    public void onUserRefreshed(User user) { 
     // do some update 
    } 
} 

回答

5

是的,你可以在你的ViewModel所有的業務邏輯,這裏有一些我本人來說如下學習MVVM

Approaching Android with MVVM
https://github.com/ivacf/archi
MVVM on Android: What You Need to Know

可以提鏈接ViewModel中的所有監聽器以及您的模型將包含的數據。

ViewModel改變一些內容並通知綁定框架內容已經改變。

模型 - 包含業務和驗證邏輯數據模型
視圖 - 定義結構,佈局和在屏幕上的圖的外觀
視圖模型 - 徒的視圖和模型之間的鏈路,處理任何 視圖邏輯

enter image description here

reference

+0

+ 1 Github鏈接。到目前爲止,我經歷了幾個教程並嘗試一個實現示例,這個項目示例將會有所幫助! –

+0

你也可以參考[this](http://stackoverflow.com/a/40479052/3134215)瞭解更多。 –

+0

嘿! @RaviRupareliya,片段交易和動畫應該在活動上完成? –

0

的,你可以使用接口的聽衆裏面MVVM就像你在做MVP你的問題的答案?是肯定的,但模式稍有不同 ü提到

public interface MainActivityViewModelListener { 
void onUserRefreshed(User user); 

是OK的MVP型設計的代碼,但對於MVVM你應該使用正確的觀察員註冊和註銷模式包括通知觀察員。

在mvp中,我們直接調用一個接口函數,但mvvm中的觀察者模式與這些簡單的接口完全不同。觀察者模式涉及客戶類的主題註冊。

,如果你想MVVM工程究竟是如何在這裏看到 https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat

這是一個簡單的應用程序具有相同的功能,但寫在三種不同的格式給MVP MVVM和MVC之間的差異有清晰的概念