一面android实习生遇到的问题
前言
mvc
首先Android也好,非后台也好,我个人觉得还是有必要学习一下后台流程的,受益匪浅…
什么是mvc呢?说实话我也是晕晕的,看了别人的博客还是晕晕的,学习过jsp的人应该都或多或少接触了javabean/entity ,servlet,web页面,其实我觉得结合项目去理解mvc,mvp等更好吧。
使用jsp搭建一个简单后台,需要有service层,dao层,数据库层,那么我想着的是mvc是不是可以理解为就是一种结构呢,规范你的项目的结构呢?
view(web界面进行交互并接收用户如输入等操作后的数据) controll(逻辑处理层):可以用来接受web端的请求,取出数据,封装数据,要求model改变状态 model(数据持久化层):当数据变动通知更改视图,用户可以得到视觉上的反馈
是不是和我们项目很相似…那么mvc是不是代表着流程的规范,我们需要做的或者我们一直以来都在按这套规范做事…view层用户操作,controll层类似servlet进行对数据封装,并将封装后的数据作为参数传入持久化层,当数据库数据发生改变,通知view进行视图更新,那图也就很好理解了
mvp
首先我们也是从项目出发,看过谷歌demo的童鞋肯定有看到谷歌的流程很规范的,XxxRepository和XxxService运用而生…
乍一看貌似只是将controll层改为了presenter而已
那么为什么需要mvp 呢?从项目来说,既然我们的controll用来进行一些业务逻辑,那么我专门用来处理逻辑就好了呀,我为什么要管数据呢,于是我需要新建一个类来专门用来作为数据源,进行数据操作等。android来说的话,若数据来自数据库可以创建一个XxxRepository类进行管理,若来自于网络可以建一个XxxService来专门进行数据的获取,那么每次我们的presenter层只需要通过新建的这两个类来获取数据,再对数据进行封装持久化,那这更偏向于单一原则了。。。
注意repository只负责拿到数据,于是乎为了实现单一原则,repository里面需要拿到多个dao层的引用作为实际的数据获取和持久化操作,完全和项目相关
随着repository类的加入Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,也就是说view与model的通信完全是通过Presenter(mvc中的controll)来操作的,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用
mvvm
学过jetpack的童鞋都知道databinding
个人感觉mvvm无疑只是在mvp的基础上加入databinding实现视图与viewmodel(presenter)的一个双向绑定,数据改变通知view改变,view改变通知数据改变
总结
无论是不用过于把思路放在设计模式上,感觉很高大上,但实际也都是为码农项目服务而已…把思路转向实际项目即可…
|