关于公司项目使用mvvm的一些思考

最近,公司的项目改版2.0。从原来的无架构换成了mvvm,经过了两个星期的开发,对于新的架构,有了自己的一些看法。

使用了android 的databinding上手起来不是特别难,基本看一遍官网的教程也就能领会了。学习成本不大。但是在开发中,会出现编译器相关的一些错误,但没有强迫症的话应该都能克服。先说说我们现在用的架构吧,我们把mvvm中的vm也就是view-model当做controller去处理(有点像jsp)界面的数据和所有的业务逻辑写到了vm中,下面是网络接口。view层使用databinding并不够深入。比方说,一个activity就会有一个xml与之对应,通常来说这个xml会绑定一格control和一个context, 这个control就是对应的是vm、 context就是这个activity。包结构没有按照功能分开,而是将所有的control放到一块。
Paste_Image.png
按照上面的简单描述,我们在开发中会碰见一些问题
  • 因为一个actiivty对应一个xml对应一个vm。这样导致view的复用成了困难。
    栗子:按照之上的架构设计,大多数的xml都会对应一个activity和一个vm,由于xml的一些控件绑定了一个特定业务逻辑的vm,这样,我们在有一个业务逻辑有些许差别但是界面显示相同的业务线时,想复用相同的view成了困难,因为这个xml已经被一个业务死死的绑定在一块。无奈!我们在做这种只有些许差别的新业务时,无法对view进行有效的服用
  • 针对于上一点,要是我们的view不同,但是业务逻辑相同(这种情况在我们的实际项目中也是出现过的),上述架构可以将vm(control)复用。但是这种情况往往伴随着新的需求的变化,我们不得不在之前的vm中加上针对于两种view显示的变量,来处理两个view的不同。(我们公司的产品需求变化速度异常快,很有可能在几个礼拜之后,两个业务逻辑差距会变得越来越大,这时的复用也就毫无意义了)
  • 这个设计与之前的相比较下而言, 只是把放在activity里的逻辑放到了vm中来,并使用了android的databinding来减少代码量,并未达到实质的效果,业务逻辑还是一堆一堆,并且,还把一小部分view的逻辑放到了xml中, 这样,view 的逻辑一部分在activity里, 一部分在xml中,更新view的数据在vm中,并且, 不能保证在开发的时候databinding都是方便使用,有的时候强行的使用databinding,数据也只是在vm中转了一圈,最后设置view的逻辑还是在activity中
  • view组件没有复用,我也不知道为什么,貌似公司不太注重代码的复用性和view的组件化,之前的项目更是特别,所有的组件用法,出现的形式都一样,并且每个页面都有,我们也要在每个activity中写一遍, 对于之前的项目也算是一个中型项目了,功能也都特别多,改起来每个类都要动,特别费劲,也就放弃了。
以上四点就是我在新的项目中发现的几点我认为在开发中特别扭的地方,问题主集中在了vm与逻辑相关,xml却又绑定了这个vm,导致复用成了问题;vm的逻辑过多(回调,内部类太多、代码太乱);view组件无组件化思想,xml结构复杂。

其实,避免以上的问题,处理方案并不复杂。在现在的vm(control)父类再加上一层viewmodel,这个vm只与view相关, 不参与任何的业务逻辑。业务的model作为这种viewmodel的子类。并且vm应该细化到view的每一个组件,这样baseviewmodel中可以包含一些组件的vm,组成一个 功能完成的viewmodel。
具体的业务实现在viewmodel的子类去完成,尽量使用rxandroid这种框架,在项目中,由于种种原因,客户端有事会访问四五个接口之后,才拿到想要的数据;有时,获取的信息需要客户端进行处理,排序,挑选,甚至假的分页处理。只要是写业务逻辑,代码就是一层一层的回调,中间插入这无数多的错误处理,简直醉了。想我们这种‘不喜欢‘’用接口隔离,使用rx是最佳的选择了


Paste_Image.png

上面的图例说明了对于现在存在问题架构的改进

总结一下
  • 组件化view
  • vm只与视图有关
  • 具体业务放在vm子类实现
  • 尽量使用响应式框架
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 转摘:https://www.zybuluo.com/shark0017/note/256112 DBinding...
    帅气的欧巴阅读 2,549评论 4 3
  • 1、概述 Databinding 是一种框架,MVVM是一种模式,两者的概念是不一样的。我的理解DataBindi...
    Kelin阅读 76,746评论 68 521
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,382评论 25 707
  • 今天白天没啥工作,折腾了折腾抽签,保税和保险的事情。。效率没想象的高,只是把抽签的钱给交了。 还是会有点难过吧,感...
    明记余心阅读 128评论 0 0
  • 95年我大学毕业,成都理工学院,现在的成都理工大学。 毕业前,十分恐慌,即将被掷入陌生的漩涡之中。那时我18岁,还...
    纯银V阅读 3,705评论 0 45