5

我在最近發佈的「Android最佳實踐」書中讀到了一個用於android編程的優秀設計模式是MVVM。在我最近的項目中自己嘗試過之後,它似乎將代碼分成更易於管理的部分。Android MVVM設計模式

視圖只處理創建視圖項和ViewModel的接口。 ViewModel在視圖上實現接口和手工操作,並與模型交互。下面的示例代碼:

型號

public class MyModel{ 
    public String myString; 
    public MyModel(String myString){ 
     this.myString = myString; 
    } 
} 

查看

public class MyActivity{ 

    public ViewManager delegate; 

    public interface ViewManager{ 
     void registerTextView(TextView tvText); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 
     delegate = new ViewController(this); 
     TextView tvText = (TextView) view.findViewById(R.id.tvText); 
     delegate.registerTextView(tvText); 
    } 
} 

視圖模型

public class ViewController implements MyActivity.ViewManager{ 
    Context activity; 
    TextView tvText; 
    MyModel myModel; 

    public ViewController(Context app_context){ 
     activity = app_context; 
     myModel = new MyModel("Hello World"); 
    } 

    @Override 
    public registerTextView(TextView tvText){ 
     this.tvText = tvText; 
     tvText.setText(myModel.myString);   
    } 
} 

不過,我還沒有看到這種方法在其他地方上網,但無法找到太多的信息支持它是一個很好的android設計模式。我也有幾個問題,如:

如果你有一個單獨的ViewModel每個片段或只是活動?

此方法在配置更改和活動休閒方面表現良好,另一個類的額外開銷是多少? 您可以將上下文轉換爲您的活動以啓用fragmentManager?

作爲代碼的這種規模如何變得更加複雜?

有沒有人有使用android的這種設計模式的經驗或任何人都可以指示我在一些很好的學習材料的方向之前,我開始轉換我的所有項目MVVM?

+0

你可以做任何你與你的代碼一樣,沒有標準。我個人不會使用這種模式;除非我因爲某種原因需要它,我覺得它只是增加了不必要的抽象。 – Karakuri

回答

4

我會盡量給出我的意見。我認爲你給出的示例代碼並沒有遵循應用MVVM(或表示模型)的核心價值,MVVM源自於表示模型)。該模式的主要動機之一是製作ViewModel(或演示模型)純POJO,以便ViewModel允許最大可測性。我沒有讀過這本書,但我建議你閱讀Martin Fowler關於這種模式的原始文章。我創建了一些示例來演示如何在Android開發中應用該模式。如果你有興趣,你可以看看這裏 - Album Sample,這是一個馬丁福勒的原始相冊示例的Android翻譯,以及AndroidMVVM,一個最小的演示應用程序。

應用該模式的一種方式是:View(Activity或fragment + layout),ViewModel,Model(業務模型:持久層,網絡等)。用這種方法,爲了回答你的問題,我認爲一個片段映射到一個ViewModel。

該模式是爲了改進設計。如果應用得當,它會降低複雜性而不是其他方式。希望這可以幫助。

4

的Android MVVM設計模式

enter image description here

數據綁定庫提供了靈活性和廣泛的兼容性 - 這是一個支持庫,這樣你就可以與所有Android平臺版本返回的Android 2使用它。1

構建環境

android { 
    .... 
    dataBinding { 
     enabled = true 
    } 
} 

您可以按照link一步一步在你的Android項目應用數據綁定。

進引導到開發者頁面Link

1

我一直在一個庫中MVVM模式構建Android應用程序。你應該在那裏找到例子。

https://github.com/manas-chaudhari/android-mvvm

核心思想:

  • 每個XML /視圖必須有一個視圖模型,雖然多個XML可以共享視圖模型
  • 每個視圖模型應該有一個模型。多的ViewModels可以共享模型
  • 使用數據綁定鏈接視圖模型< - >查看

相關博客文章結構:https://manaschaudhari.com/blog/2016/08/19/rxjava-meets-data-binding-part-3