安卓MVVM设计模式示例

65

我目前主要进行WPF开发,并开始创建一些基本的Android应用程序。在创建WPF应用时,我经常使用MVVM,通常使用Prism,想知道是否有任何适用于Android平台的MVVM示例?


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - jbatista
这里有一个在Android中使用MVVM和RxJava的示例:https://dev59.com/a2oy5IYBdhLWcg3wfeMR#50421750 - Ali Nem
14个回答

88

完美,这正是我在寻找的。使用 android-binding 会有任何性能影响吗? - Tom Dudfield
1
到目前为止,我认为它们还不太显眼。你可以前往市场并搜索我写的那些示例(搜索:Android绑定,在Android市场中),亲自看一看。 - xandy
@xandy,现在已经很晚了。但是安迪,你做得非常出色。我们将使用Android绑定并等待v1.x.x版本发布。无论如何,你能否透露一些关于完整库何时可用的消息或线索? - johntheripp3r

7
我有时会使用ViewModels将纯Model转换为应该显示的Model,但是MVVM-isms的很多都来自于你在WPF框架中内置的大量数据绑定引擎。在Android世界中可能找不到与WPF + MVVM完全相同的体验,但是您可以采用许多良好的概念并实现它们(只是没有自动数据绑定)。
首先,只需创建ViewModels。您不需要像Prism这样的框架来创建ViewModels。您没有所有PropertyChanged通知等内容,但是您可以将数据转换为UI更好地使用的信息,这将清理您的代码。我曾经用一个滑块密集型UI做了一个完美的例子。 Android的SeekBar始终是基于零的,并使用整数值,因此您无法从模型绑定到最小、最大和增量值。您可以使用ViewModel将您的min/max值转换为基于0的等效值,以便SeekBar可以使用它们...这只是一个例子。对于基于值范围显示颜色和大小的情况也是如此。对我来说,这就是ViewModels的全部。
至于DependencyInjection方面,请查看RoboGuice。在本地Meetup上看过其创建者的演示后,我刚开始在我的一个项目中使用它,这可能正是您要寻找的东西。 RoboGuice on Google Code RoboGuice Google Group

从阅读一些其他帖子来看,Android似乎已经为MVC模式做好了准备。RoboGuice看起来非常有用,我喜欢它解决UI组件的方式,而不是必须有很多findViewById调用。谢谢。 - Tom Dudfield

4

4

太好了!由@Florina Muntenescu撰写的文章。

Model-View-ViewModel模式

MVVM模式中的主要参与者是:

  • View - 通知ViewModel用户的操作
  • ViewModel - 公开与View相关的数据流
  • DataModel - 抽象出数据源。ViewModel与DataModel一起工作以获取和保存数据。

MVVM架构示例:

https://github.com/erikcaffrey/People-MVVM

https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding/

https://github.com/iammert/Android-MVVM-Architecture

https://github.com/segunfamisa/android-mvvm-sample

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


3

目前有一个比较新的框架正在开发中,它允许将视图绑定到ViewModel,它被称为android-binding。使用这个框架和RoboGuice,你可以实现MVVM模式。虽然这个框架还需要一些工作,但它是一个很好的起点。


3

Android-Data-Binding库是一种将数据与用户界面元素连接的工具。创建布局文件并对每个项进行标记后,一行代码即可将所有数据绑定到用户界面元素上,并为您节省处理其他任务的时间。


2

2
几年前我也做过一些WPF&WP开发,Prism & MVVM Light Toolkit是构建WP应用程序的常用工具包,我认为它非常适合Windows手机应用程序架构!因此,我利用我以前的WP开发经验进行模仿,并创建了一个Android MVVM Light Toolkit(一个帮助构建Android MVVM应用程序的工具包,我们有更多属性用于视图的数据绑定(如ImageView的Uri),我们创建一些命令来处理事件(如按钮点击),还有一个全局消息管道来与其他ViewModel进行通信)。

GitHub:Android MVVM Light Toolkit,可以参考样例。

架构: http://upload-images.jianshu.io/upload_images/966283-78b410b9af8b18fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

希望能帮到您!


图片链接给了我一个我认为是中文错误信息,后跟:wssupport@chinanetcenter.com经由:tzhdx29:10(Cdn Cache Server V2.0) - Noumenon

1

这里提供一些参考,供其他有兴趣的人查阅。我是RoboBinding的贡献者——一个为Android平台提供数据绑定Presentation Model框架的项目。除了帮助项目结构外,RoboBinding的主要重点之一是使使用普通JUnit测试而不是Android单元测试来测试Android应用成为可能,因为单元测试对于保证项目质量非常重要,但Android单元测试运行时间很长,使得单元测试有些不切实际。RoboBinding本身带有300多个JUnit测试以确保其质量。MVVM源自微软,是Martin Fowler介绍的Presentation Model设计模式的一种专业化替代方案。其他替代方案包括:Android-Binding、Bindroid和MvvmCross。


1

有一个名为MVVMCross的项目。

它是一个免费、开源且设计良好的MVVM框架,由Stuart Lodge开发。

他实现了Android和iPhone的绑定,因此现在MVVM也适用于所有这些平台。

对我来说,这是最好的MVVM框架之一——它真正展示了MVVM的强大。使用它,您可以为不同的平台(WP7、Android、iPhone、WinRT)编写一个代码(模型和视图模型层),并只需更改应用程序UI(视图层)。


7
这是针对MonoDroid而非Android Java本地化的。 - Premier
最终结果是一个安卓应用程序。他在问题中从未直接指定Java。 - PmanAce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接