美文网首页安卓数据绑定(dataBinding)从0到学会使用
Android6.0之强大的DataBinding(数据绑定)-

Android6.0之强大的DataBinding(数据绑定)-

作者: it奔跑在路上 | 来源:发表于2017-03-09 15:14 被阅读52次
    文章简介:
       1.此文章主要是为项目实战前准备所用
    

    ---------------------------------------进阶篇(简单介绍)----------------------------------------------
    一、在正式使用之前,还是先简单介绍一下数据绑定(MVVM):
    1.之前笔者一直都是说数据绑定,没有说它属于哪种框架,其实,他既不属于MVC,MVP,而是属于MVVM。
    2.分别介绍一下MVC,MVP,MVMV(虽然网上这样的内容很多,但还是介绍一下,其实我也是copy的)

    MVC

    MVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,具体见下图


    MVC.png

    当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。

    那具体到Android上是怎么样一个情况呢?

    大家都知道一个Android工程有什么对吧,有java的class文件,有res文件夹,里面是各种资源,还有类似manifest文件等等。对于原生的Android项目来说,layout.xml里面的xml文件就对应于MVC的view层,里面都是一些view的布局代码,而各种java bean,还有一些类似repository类就对应于model层,至于controller层嘛,当然就是各种activity咯。大家可以试着套用我上面说的MVC的工作原理是理解。比如你的界面有一个按钮,按下这个按钮去网络上下载一个文件,这个按钮是view层的,是使用xml来写的,而那些和网络连接相关的代码写在其他类里,比如你可以写一个专门的networkHelper类,这个就是model层,那怎么连接这两层呢?是通过button.setOnClickListener()这个函数,这个函数就写在了activity中,对应于controller层。是不是很清晰。

    大家想过这样会有什么问题吗?显然是有的,不然为什么会有MVP和MVVM的诞生呢,是吧。问题就在于xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的这样一个窘境。大家回想一下自己写的代码,如果是一个逻辑很复杂的页面,activity或者fragment是不是动辄上千行呢?这样不仅写起来麻烦,维护起来更是噩梦。(当然看过Android源码的同学其实会发现上千行的代码不算啥,一个RecyclerView.class的代码都快上万行了呢。。)

    MVC还有一个重要的缺陷,大家看上面那幅图,view层和model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力。

    正因为MVC有这样那样的缺点,所以才演化出了MVP和MVVM这两种框架。

    MVP

    MVP作为MVC的演化,解决了MVC不少的缺点,对于Android来说,MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理。下面还是让我们看图

    MVP.png

    从图中就可以看出,最明显的差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系。看到这里大家可能会问,虽然view层和model层解耦了,但是view层和presenter层不是耦合在一起了吗?其实不是的,对于view层和presenter层的通信,我们是可以通过接口实现的,具体的意思就是说我们的activity,fragment可以去实现实现定义好的接口,而在对应的presenter中通过接口调用方法。不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试。这就解决了MVC模式中测试,维护难的问题。

    当然,其实最好的方式是使用fragment作为view层,而activity则是用于创建view层(fragment)和presenter层(presenter)的一个控制器。

    MVVM

    MVVM最早是由微软提出的

    MVVM.png

    从图中看出,它和MVP的区别貌似不大,只不过是presenter层换成了viewmodel层,还有一点就是view层和viewmodel层是相互绑定的关系,这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui。

    我们很难去说MVP和MVVM这两个MVC的变种孰优孰劣,还是要具体情况具体分析。

    ------------------------------------------------That's all--------------------------------------------------------

    1.没有给代码而是我相信大部分人已经知道了MVC,MVP的代码怎么写
    2.这里只是讲目前三种框架进行对比
    3.原文的链接如下:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0414/4143.html
    4.后面就开始真正的实战了,大家激动吧,其实我更激动。利用上班时间写的文章,难得的可以闲一天,测试了快一个月的Bug然后修复,都快吐了。下周就准备上线了,马上就又要忙了。

    相关文章

      网友评论

        本文标题:Android6.0之强大的DataBinding(数据绑定)-

        本文链接:https://www.haomeiwen.com/subject/pdnwgttx.html