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之前指出我一些好的学习资料的方向???
我会尽量发表我的意见。我认为您提供的示例代码没有遵循应用 MVVM(或表示模型。MVVM 源自表示模型)模式的核心价值。该模式的主要动机之一是使 ViewModel(或 Presentaion Model)成为纯 POJO,以便 ViewModel 允许最大的可测试性。我还没有读过这本书,但我建议您阅读 Martin Fowler 关于该模式的原始文章。我创建了一些示例来演示如何在 Android 开发中应用该模式。如果您有兴趣,可以在这里查看 - Album Sample,这是 Martin Fowler 的原始专辑示例的 android 翻译,以及AndroidMVVM,一个最小的演示应用程序。
应用该模式的一种方法是:视图(活动或片段+布局)、视图模型、模型(业务模型:持久层、网络等)。通过这种方法,为了回答您的问题,我认为一个片段映射到一个 ViewModel。
图案是为了改进设计。如果应用得当,它将降低复杂性,而不是相反。希望这可以帮助。
Android MVVM 设计模式
\n\n\n\n数据绑定库提供灵活性和广泛的兼容性 \xe2\x80\x94 它是一个支持库,因此您可以将它与所有 Android 平台版本一起使用,直到 Android 2.1
\n\n搭建环境
\n\nandroid {\n ....\n dataBinding {\n enabled = true\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n您可以按照此链接逐步操作并在您的 Android 项目中应用数据绑定。
\n\n高级指南转到开发者页面链接
\n