Android MVVM设计模式

sir*_*ine 6 android design-patterns mvvm android-fragments android-activity

我在最近发行的“ Android最佳实践”一书中读到,MVVM是用于Android编程的一种很好的设计模式。在我最新的项目中亲自尝试过之后,将代码分成更易于管理的部分似乎确实有益。

视图仅处理视图项的创建和ViewModel的接口。ViewModel实现接口并处理视图上的操作以及与Model的交互。下面的示例代码:

模型

 public class MyModel{
    public String myString;
    public MyModel(String myString){
       this.myString = myString;
    }
}
Run Code Online (Sandbox Code Playgroud)

视图

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

视图模型

 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);           
    }
 }
Run Code Online (Sandbox Code Playgroud)

但是,我在网上其他任何地方都没有看到这种方法,并且无法找到很多支持它的信息,这是一种很好的android设计模式。我也有一些问题,例如:

您是否应该为每个片段或活动单独拥有一个ViewModel?

这种方法在配置更改和Activity重新创建上是否具有其他类的额外开销?您可以将上下文转换为活动以启用fragmentManager的使用吗?

随着代码变得越来越复杂,它如何扩展?

有没有人有在Android上使用这种设计模式的经验,或者有人可以在我开始将所有项目转换为MVVM之前指出我一些好的学习资料的方向???

Che*_*eng 5

我会尽量发表我的意见。我认为您提供的示例代码没有遵循应用 MVVM(或表示模型。MVVM 源自表示模型)模式的核心价值。该模式的主要动机之一是使 ViewModel(或 Presentaion Model)成为纯 POJO,以便 ViewModel 允许最大的可测试性。我还没有读过这本书,但我建议您阅读 Martin Fowler 关于该模式的原始文章。我创建了一些示例来演示如何在 Android 开发中应用该模式。如果您有兴趣,可以在这里查看 - Album Sample,这是 Martin Fowler 的原始专辑示例的 android 翻译,以及AndroidMVVM,一个最小的演示应用程序。

应用该模式的一种方法是:视图(活动或片段+布局)、视图模型、模型(业务模型:持久层、网络等)。通过这种方法,为了回答您的问题,我认为一个片段映射到一个 ViewModel。

图案是为了改进设计。如果应用得当,它将降低复杂性,而不是相反。希望这可以帮助。


Ram*_*ash 5

Android MVVM 设计模式

\n\n

在此输入图像描述

\n\n

数据绑定库提供灵活性和广泛的兼容性 \xe2\x80\x94 它是一个支持库,因此您可以将它与所有 Android 平台版本一起使用,直到 Android 2.1

\n\n

搭建环境

\n\n
android {\n    ....\n    dataBinding {\n        enabled = true\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以按照此链接逐步操作并在您的 Android 项目中应用数据绑定。

\n\n

高级指南转到开发者页面链接

\n