关于MVVM的一些思考

​ 寻找mvvm相关资料已经找了很长时间了,简书,掘金,CSDN看了很多各路大神洋洋洒洒几千字的文章,但最终都没有找到我所想要的架构设计,大多数文章先在介绍MVVM的起源,然后介绍关于DataBinding框架的一些使用方法。

​ Shit!我要看这些干嘛!因为既然想到MVVM模式,那肯定是经过标准安卓设计模式(且这么说,否则没有用到设计的某些程序,都自称自己是MVC),再经过MVP模式,最终会选择MVVM这个模式。So,DataBinding这个框架我已经默认你会了,不过确实不难,用熟了会很爽。

​ 为什么要使用MVVM?有人说,我不喜欢MVVM,因为把逻辑写在XML里面让人看的不够清晰,但是看到这样的代码你会说不清晰?

      <TextView android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@{user.name}"/>
       
      <TextView android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@{user.nick}"/>

​ 这样的代码明显比你那个findViewById再setText强的太多,User在变,TextView跟着再变,感觉这里的逻辑就是那么顺理成章。有些人说我有ButterKnife不需要findviewById了,但是ButterKnife的效率貌似不高(查阅了相关资料,没有去做实验),但是DataBinding可不一样,Google自家开发的框架,AndroidStdio原生支持,XML语法高亮,方法跳转等等,更为重要的是DataBinding是一次性生成布局的树状结构,对于XML中添加Id的控件,即可以直接以final成员的方式访问,不会重复findViewById,傻傻的从根节点寻找。hi!儿子,你是某某Id的view吗?不是啊,那你问问你儿子看。。。

​ 那怎样的设计会比较完美呢?在做的这个项目,结合老大哥留下的代码我也做了很多尝试,MVPVM,这应该是他的尝试,这个名词在翟一凡的博客中好像也看到过,我在原有代码的基础上进行了自己的改造,M层处理数据的来源,V层是架在Fragment上,处理界面的变化,P层处理网络请求,去调M层的数据,VM这个层是好layout绑定在一起,我当时的设计是这样的,一个界面一个VM,即使这个界面上面是一个Banner图,中间是几个选择菜单,底下是一个纵向的列表,我是一个界面一个VM的形式写的,在Presenter和ViewModule这两个层可以不导入android包中的任何一个类,与其他Activity交互也都是在View中进行的,s写的也是十分的舒服,项目上线后,我又在思考这个设计的问题,因为模式而模式,导致了0复用,类太多,一个界面下面至少有xxxContract,xxxPresenter,xxxViewModule,xxxFragemnt,显然这不是我所看到的。后来在github上面找到一个示例 archi,start的人还蛮多的。这个示例介绍上面提到的安卓的三种设计,主界面是列表,次界面是详情。大多数App都有这个设计吧,原谅我蹩脚的截图,排版排不好,将就一下。


​ 然后是这个是类的结构,分了m,v,vm三个包。


​ 在这个设计里面,V层的接口写在VM中,然后每个View对应一个VM,其实现在想来,应该是这样设计的,MVVM,视图和模型绑定,那么每个视图绑定一个一个VM进行绑定,VM这个层完全可以取代掉Presenter这个层,也不需要Contract,因为Contract的存在就是关联P和V,这样处理的好处就是,各个View之间可以解耦,举个例子,可能存在多个界面用到Banner,但是ViewModule不需要动,变化的只是其中的数据而已,再说点击Banner的跳转事件,以前是写在View层的,因为我的VM中是不含有Context的,但是从archi这个示例看来,他点击列表中的Item跳转事件都直接写在VM中,那么我们的banner完全也可以把点击跳转写在VM中,这下好了,只需要关心数据,剩下的都交给他吧。

​ 近两年Android涌现出好多新的框架,新的东西带来新的挑战,学习的曲线是陡峭的,但是学会之后开发效率也是可以提高数倍!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容