Android MVVM 设计模式

标签 android design-patterns android-activity mvvm android-fragments

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

View 仅处理 View 项的创建和 ViewModel 的接口(interface)。 ViewModel 实现接口(interface)和处理 View 上的操作以及与模型的交互。示例代码如下:

模型

 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);
    }
}

View 模型

 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 的良好设计模式。我还有一些问题,例如:

您应该为每个 fragment 或只是 Activity 有一个单独的 ViewModel 吗?

这种方法在配置更改和 Activity 重新创建时是否表现良好,但需要另一个类的额外开销? 您能否将上下文转换为您的 Activity 以启用 fragmentManager 的使用?

随着代码变得越来越复杂,这种情况如何扩展?

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

最佳答案

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

应用该模式的一种方法是:View(Activity 或 fragment+layout)、ViewModel、Model(业务模型:持久层、网络等)。通过这种方法,为了回答您的问题,我认为一个 fragment 映射到一个 ViewModel。

模式是为了改进设计。如果应用得当,它会降低复杂性,而不是相反。希望这会有所帮助。

关于Android MVVM 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678866/

相关文章:

java - fragment 已添加到 Activity 但不显示

android - 使用单个 fragment 来显示 UI 而不是 Activity 是一个好习惯吗?

android - 如何在我的音乐播放器 (Android) 中显示专辑封面?

android - 在 android 中发送推送通知

android - 在开发 Android 应用程序时使用 Linux 操作系统重要吗?

c++ - ‘*’ token 之前的预期初始值设定项

oop - 什么是委托(delegate)?我什么时候想使用它?

android - 错误 :Failed to resolve: support-vector-drawable

java 将十六进制 NCR 文本转换为 unicode 字符

c# - 使用 new 运算符创建对象/依赖项与使用 DI 容器