Android MVVM设计模式示例

时间:2011-02-11 18:59:49

标签: java android design-patterns mvvm dependency-injection

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

14 个答案:

答案 0 :(得分:83)

我是Android-Binding的开发者。就像@Brentley所说,这是一个非常新的项目,但我希望能获得更多的嗡嗡声和经验,以便它可以得到改善。回到你的问题,我在MVVM上用android-binding编写了一些简单的介绍/教程:

潜在的采用者也请注册project discussion group.

答案 1 :(得分:7)

我有时会使用ViewModels从纯模型转换为模型应该显示的内容,但是MVVM-isms的大部分来自于你在WPF框架中内置了这个海量数据绑定引擎的事实。您可能无法在Android世界中找到WPF + MVVM的确切体验,但您可以采用很多好的概念并实现它们(只是没有自动数据绑定的东西)。

首先,只需创建ViewModels。您不需要像Prism这样的框架来创建ViewModels。您没有所有PropertyChanged通知和类似的东西,但您可以将您的数据转换为UI可以更好地使用的信息,这将清理您的代码。一个完美的例子是我用滑块重的UI做的事情。 Android的SeekBar始终为零,并使用整数值,因此您无法绑定模型中的最小值,最大值和增量值。您可以使用ViewModel将您的最小/最大值转换为您的SeekBar可以使用的基于0的等价物......只是一个示例。基于值范围等显示颜色和大小也是如此。对我而言,这就是ViewModel的全部内容。

就DependencyInjection而言,请查看RoboGuice。我刚开始在其中一个项目中看到其创建者在本地Meetup上的演示文稿时开始使用它,这可能就是您正在寻找的内容。

RoboGuice on Google Code

RoboGuice Google Group

答案 2 :(得分:4)

现在有一个官方Android数据绑定插件,虽然它目前仍处于测试阶段。还正在努力为Android Studio的beta版本中的绑定语法添加工具支持。

有关详细信息,请参阅以下内容

https://developer.android.com/tools/data-binding/guide.html

答案 3 :(得分:3)

正在开发一个相对较新的框架,允许将视图绑定到名为android-binding的ViewModel。使用此框架和RoboGuice,您可以获得MVVM。该框架仍然需要一些工作,但这是一个很好的起点。

答案 4 :(得分:3)

Android-Data-Binding库是一种用于将数据连接到用户界面元素的工具。创建布局文件并标记每个项目后,一行代码会将所有数据绑定到用户界面元素,从而节省您完成其他任务的时间。

答案 5 :(得分:3)

大! @Florina Muntenescu

的艺术作品

模型 - 视图 - 视图模型模式

MVVM模式的主要参与者是:

  • 视图 - 通知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

答案 6 :(得分:2)

最近,我已经实现了MVVM模式,用于构建带有数据绑定库的Android应用程序。在这里,您可以阅读我已完成的工作和代码片段的详细评论:http://cases.azoft.com/mvvm-android-data-binding/

要详细了解该主题,您还可以查看以下应用示例:https://github.com/ivacf/archi

有搜索和列表屏幕完成工作的可视化示例。

答案 7 :(得分:2)

几年前,我还做了一些WPF和WP开发,Prism& amp; MVVM Light Toolkit通常用于构建WP App,我认为它非常适合Windows Phone应用程序架构!所以我使用我以前的WP开发经验,然后模仿创建 Android MVVM Light Toolkit (一个工具包帮助构建Android MVVM应用程序,我们有更多的视图数据绑定属性(比如Uri for ImageView),我们创建一些处理事件的命令(比如点击Button),还有一个全局消息管道与其他ViewModel通信。)

GitHub: Android MVVM Light Toolkit,有参考样本供参考。

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

希望能帮到你!

答案 8 :(得分:1)

有一个名为MVVMCross的项目。

这是由Stuart Lodge开发的免费,开源和精心设计的MVVM框架。

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

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

答案 9 :(得分:1)

仅发布作为对可能感兴趣的其他人的参考。我是RoboBinding的贡献者 - Android平台的数据绑定演示模型框架。它是同一目的的另一个框架。除了帮助项目结构,RoboBinding的一个主要焦点是使用正常的JUnit测试来测试Android应用程序而不是Android单元测试,因为单元测试对于保证项目质量非常重要,但Android单元测试需要很长时间才能运行并使单元测试有点不切实际。 RoboBinding本身带有300多个JUnit测试,以确保其质量。 MVVM起源于Microsoft,是Martin Fowler介绍的Presentation Model设计模式的专业化。其他选择:Android-Binding,Bindroid和MvvmCross。

答案 10 :(得分:0)

您可以在Fragments中按照以下步骤进行DataBinding:我已经在Fragment中绑定数据的示例中发布了设计和java类。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    <data class=".UserBinding">
        <variable  name="user" type="com.darxstudios.databind.example.User"/>
    </data>
 <RelativeLayout

    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment"
    >



        <TextView android:text='@{user.firstName+"  "+user.lastName}' android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:id="@+id/textView" />

     <Button
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="New Button"
         android:id="@+id/button"
         android:layout_below="@+id/textView"
         android:layout_toEndOf="@+id/textView"
         android:layout_marginStart="40dp"
         android:layout_marginTop="160dp" />

 </RelativeLayout>
</layout>


    public class MainActivityFragment extends Fragment {

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final User user = new User();
        user.setFirstName("Michael");
        user.setLastName("Cameron");
        UserBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_main, container, false);
        binding.setUser(user);

        View view = binding.getRoot();

        final Button button = (Button) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                user.setFirstName("@Darx");
                user.setLastName("Val");
            }
        });

        return view;
    }

}

Developer site DataBinding Guide Line

答案 11 :(得分:0)

我发现这个使用Android数据绑定库编写的关于MVVM的Writing Testable Android MVVM App系列非常好。在这个系列中,他从简单的例子到recyclerview进行了解释,并且还有测试。

您也可以尝试mv2m library

答案 12 :(得分:0)

github中有很多MVVM框架的例子。我建议使用DroidWizard

DroidWizard在视图和视图模型之间进行自己的耦合,框架与mvvm略有不同。

ModelEngine ViewModel查看模型ViewModel视图的内容

答案 13 :(得分:0)

https://github.com/MindorksOpenSource/android-mvvm-architecture

Android MVVM体系结构:示例应用程序

此存储库包含一个详细的示例应用程序,该应用程序使用Dagger2,Room,RxJava,FastAndroidNetworking,PlaceHolderView和AndroidDebugDatabase实现MVVM架构

该应用具有以下软件包:

outline: 1px solid transparent