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