MVVM浅析

作者: wayDevelop | 来源:发表于2019-03-05 11:43 被阅读88次

    参考文章
    前不久google官方发布了MVVM的正式库。官方的正式MVVM库主要包括下面四个:


    其中只有ViewModel是MVVM结构中的一个组件,其他的三个都是辅助性质的。

    lifecycles 就是处理UI界面的生命周期,在26版本以后的Support库中,AppCompatActivity和SupportActivity中都实现了LifecycleOwner,内部已经对UI界面的生命周期做了处理了。

    LiveData是一个抽象类,我们可以存放UI页面需要的数据,就是把数据包装在LiveData中了,我们可以观测LiveData中的数据变化,但是LiveData是跟UI的生命周期关联的,当UI页面销毁了,LiveData的数据变化回调是不会执行的。

    Room 就是一个sqlite数据持久化库,我们也可以使用别的ORM库。

    MVVM分为三层

    • Model :
      Model层就是职责数据的存储、读取网络数据、操作数据库数据以及I/O,一般会有一个ViewModel对象来调用获取这一部分的数据。
      负责数据实现和逻辑处理,当然不止于此,model层将结果通过接口的形式传递给viewModel层

    • View : 对应于Activity和XML,负责View的绘制以及与用户交互,主要负责界面的显示。

    • ViewModel : ViewModel 只做和业务逻辑和业务数据相关的事,
      创建关联,将model和view绑定起来,如此之后,我们model的更改,通过viewmodel反馈给view,从而自动刷新界面,viewModel 和MVP中的presenter 的作用类似 ,只不过是通过 databinding 将数据与ui进行了绑定。

    DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个关键的工具,它是支持双向绑定的。


    看上图ModelView是不会发生关系的,ViewModel是把View和Model关联起来的

    MVVM优势总结:

    • View和Model双向绑定,一方的改变都会影响另一方,开发者不用再去手动修改UI的数据,互相自动的。
    • 不需要findViewById也不需要butterknife,不需要拿到具体的View去设置数据绑定监听器等等,这些都可以用DataBinding完成。
    • View和Model的双向绑定是支持生命周期检测的,不会担心页面销毁了还有回调发生,这个由lifeCycle完成。
    • 不会像MVC一样导致Activity中代码量巨大,也不会像MVP一样出现大量的View和Presenter接口,项目结构更加低耦合。
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
            UserBean userBean = new UserBean ("张三", "25");
            binding.setUser(userBean );
        }
    }
    

    这里用DataBindingUtil.setContentView代替了setContentView,然后创建一个 UserBean 对象,通过 binding.setUser(userBean) 与 variable 进行绑定。
    注意:这个ActivityMainBinding 是如何生成的呢?他是继承ViewDataBinding,这个类的生成是有规则的,它是根据对应的布局文件的名字生成的,比如:activity_main-->ActivityMainBinding 、fragment-->FragmentBinding即:第一个单词首字母大写,第二个单词首字母大写,最后都会拼上Binding就是生成的Binding类。

    相关文章

      网友评论

        本文标题:MVVM浅析

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