android数据绑定的优缺点是什么?

android数据绑定的优缺点是什么?,android,mvvm,data-binding,android-databinding,Android,Mvvm,Data Binding,Android Databinding,我和我的同事都有网络应用MVVM方面的经验,而我们对原生android开发还是新手。现在我们对android数据绑定有相反的看法——我是它的粉丝,而他不是 我的论点是: 减少样板代码,从而带来 少耦合 可读性强 功能强大、易于实现的自定义属性和自定义视图 甚至比findViewById()还要快 他的论点是: 自动生成的.类增加了应用程序大小 更难调试 我做了一些调查,但没有太多的讨论。现在我想收集android数据绑定的优缺点 讨论内容包括但不限于: 单元测试 应用程序大小 演出

我和我的同事都有网络应用MVVM方面的经验,而我们对原生android开发还是新手。现在我们对android数据绑定有相反的看法——我是它的粉丝,而他不是

我的论点是:

  • 减少样板代码,从而带来
    • 少耦合
    • 可读性强
  • 功能强大、易于实现的自定义属性和自定义视图
  • 甚至比findViewById()还要快
他的论点是:

  • 自动生成的.类增加了应用程序大小
  • 更难调试
我做了一些调查,但没有太多的讨论。现在我想收集android数据绑定的优缺点

讨论内容包括但不限于:

  • 单元测试
  • 应用程序大小
  • 演出
  • 学习曲线
  • 可读性
  • 耦合

我将首先对你的论点进行评论,然后陈述我的观点:

1.删除样板代码-它将删除一些,只需在
xml
中移动一些,或者需要额外的类。因此,您必须小心并平衡数据绑定的使用

2.更强的可读性-取决于你是否是一名新开发人员,那么你可能会发现学习它很容易,但如果你以前在android上工作过,你将需要额外的时间来学习它

3.强大-代码有更多的功能,你可以在代码中实现你喜欢的任何东西。这样想吧,使用数据绑定实现的所有东西都有一个代码等价物(可能需要编写更长、更多的代码),但相反的代码无效

4.甚至比
findViewById
更快-比较这两者之间的速度,在我看来是无用的,你永远不会注意到差异,如果你看到一些差异,那么其中一个实现是错误的

5.自动生成类-它确实会增加应用程序的大小,但同样,只有当你拥有大量的应用程序时,它才会起作用。的确,在android开发网站上,他们声明使用创建自动生成代码的库或生成额外代码的注释是不好的

6.难以调试-取决于您的习惯,如可读性,检查调试对某些问题来说都很难,通过调试而不是使用其他库,您会变得更好

这纯粹是我的观点,我用不同的库和不同的方法开发了许多应用程序,它们都有优点和缺点,但我学到的是:平衡一切,不要使用大量的库,不要浪费时间实现已经实现且运行良好的东西,不要“解耦一切”,不要“耦合”一切,不要只使用代码,不要试图“生成”所有内容

我认为这是非常错误的,你可能会得到一个错误的想法,如果你问一些库/实现的“优点和缺点”,因为通常它不会是公正的,你会从以特定方式使用库的人那里得到很多优点,它起了作用,而其他人会给你缺点,因为他们使用了不同的库,但它不起作用

总之,我认为您应该检查库可以为您做什么,不能为您做什么,并决定它是否有利于您的设置。换句话说,你应该决定一个图书馆是否对你有益,而不是对其他人有益;)

更新-2018年8月8日

首先,我仍然坚持我最初的结论,在这种情况下,平衡是关键,但在我的情况下,数据绑定稍微加快了开发过程,也改进了它。这里有一些你们都应该思考的新观点

  • 测试UI——使用数据绑定测试UI要容易得多,但数据绑定还不够,你还需要一个好的架构,使用Google建议的架构将展示数据绑定的实际威力

  • 我的原始答案中第2点和第5点出现了最明显的变化。在我们决定使用数据绑定之后,阅读代码就比较容易了,这里最重要的是:作为一个团队,我们决定使用数据绑定,在这之后,我们希望在XML文件中有大部分简单的基本UI设置

  • 对于调试部分,这里有一点棘手,AndroidStudio在数据绑定的错误和自动完成方面有很多改进,但最常见的错误在第一次出现2-3次之后就会出现。此外,我还了解到,一个“干净的项目”的形式不时,帮助很大

  • 您必须考虑的另一点是使用数据绑定的项目配置,因为(3.1)目前支持Java的默认数据绑定(只是在graddle中设置了一个标志),但是我在Kotlin方面遇到了一些问题,在这里进行了一些搜索之后,我设法修复了所有问题

  • 作为第二个结论(来自我的原始帖子),如果你可以,并且项目截止日期/要求/等允许你尝试数据绑定,那么去做它是值得的(除非你做了一些非常愚蠢的事情:)。

    即使我喜欢danypata的回答,我还是想在android数据绑定中添加/编辑他的一些陈述

    1.删除样板代码-如danypatas answer中所述,它删除了一些代码,并在布局中的其他地方添加了一些代码。这并不意味着样板代码没有减少,因为它通常是减少的

    例如,您可能希望创建一个bindingadapter,它为微调器/recyclerview/listview/处理多个自定义ArrayAdapter。。但只需要一个简单的适配器。您可能希望在布局中使用适配器,例如

    app:mycoladaptersdata=“@{model.mydata}”

    现在,您可以创建通用适配器,并(重新)在所有布局中使用bindingadapter,而不是使用例如:

    ListView lv = findViewById(...);
    CoolGenericAdapter<MyModel> coolAdapter = new CoolGenericAdapter<>(...);
    lv.setAdapter(coolAdapter);
    
    ListView lv=findViewById(…);
    冷却通用适配器冷却