如何有效地为我的Android应用程序实现MVVM设计模式,这也将简化测试用例的编写?

时间:2015-12-19 20:34:50

标签: android mvvm testcase

我计划为我的Android应用程序实现MVVM架构设计模式。我在网上看到它将帮助我实现有效的关注点分离,并轻松编写数据模型,UI等测试用例。需要一些见解/建议。

1 个答案:

答案 0 :(得分:24)

那么,要了解如何有效地使用MVVM,请从Android MVVM Design Pattern Examples

开始

在这里你会找到帖子:

  

我是Android-Binding的开发者。就像@Brentley所说的那样   一个非常新的项目,但我希望得到更多的嗡嗡声和经验   它可以改进。回到你的问题,我写了一些   关于MVVM的简单介绍/教程与android-binding:

           

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

阅读整个主题。您会注意到MVVM是一个相对较新的框架,强烈建议您与Google&#sp; Data Binding库和依赖注入库(如Roboguice或{}合作使用它。 {3}} ...

......但最好的就是这个:

Dagger2

作者通过示例解释使用MVVM和数据绑定库 - 我的意思是他自己创建的应用程序。他总结道:

  

现在要知道这种方法是否是开发应用程序的正确方法还为时尚早,但是这个实验让我有机会看到未来项目的可能性之一。这是我绝对想要玩的东西。

Model-View-ViewModel很有意思,因为在传统的Android架构中,控制器会将数据推送到视图中。您可以在“活动”中找到该视图,然后在其上设置内容。

使用MVVM,您的ViewModel会更改某些内容,并通知绑定数据框架有关已更改的内容。然后,框架会自动更新绑定到该内容的任何视图。

这两个组件只是通过数据和命令接口松散耦合。

使用MVVM的下一个方法确实可以测试。来自Approaching Android with MVVM. Building an MVVM architectured application using the Data Binding Library

  

由于ViewModel不再依赖View,因此您可以测试ViewModel,而View甚至不存在//create connection, with a connection string using(var conn = new SqlConnection(connectionString)) { try { conn.Open(); } catch(Exception ex) { //Handle exception } if(conn.State == System.Data.ConnectionState.Open) { var commandText = "SELECT Ad FROM OGRENCILER WHERE OgrenciKartID=@id"; //"using" helps in automatically disposing of the object once it's done using(var comm = new SqlCommand(commandText, conn)) { //one of the proper ways to add a parameter, which also sets the value comm.Parameters.Add("@id", SqlDbType.Int).Value = _kimilik; //the rest is correct, assuming the connection can be established and this is valid SQL (correct DB structure) object result = null; try { result = comm.ExecuteScalar(); } catch(Exception ex) { //handle exception } if(result != null) { var adId = result.ToString(); adLabel.Text = adId; } } conn.Close(); } } 。通过对其他依赖项进行适当的依赖注入,可以非常直接地进行测试。

     

例如,不是将VM绑定到实际视图,而是可以在测试用例中创建VM,为其提供一些数据,然后在其上调用操作,以确保正确转换数据。 (...)所有这些都可以在不必与实际视图交互的情况下完成。

另请阅读:MVVM on Android: What You Need to Know

希望有所帮助