浅谈单一结构体项目的组件化改造

本文出自门心叼龙的博客,属于原创类容,转载请注明出处。https://blog.csdn.net/geduo_83/article/details/88606548

昨天晚上一年一度的315晚会又来了,今年虽然没有哪家大公司上榜,但是曝光了一些黑心小企业,我们平时用的塑料盆、塑料袋、孩子的塑料玩具有可能都是用医疗废弃物,如输液袋、输液管、一次性注射器、血袋等加工而成的,还有平日孩子们抢着买的辣条这种混合了十几中添加剂的垃圾食品的生产环境着实让人辣眼睛,我们无比惊叹这些企业为了金钱、利益没有一点道德底线,等待他们的将是法律的制裁。

好了,我们言归正传,项目功能移植可以说在日常开发中很多时候都会遇到,把A项目中的几个功能移植到B项目当中,最近工作中就有这样一个需求,需要将公司的一个老项目的几个功能模块移植到新项目当中,一开始以为工作量不是很大,但是随着改造工作的深入,不得不改变原有的移植改造方案。

对,就是将一个老项目进行移植改造,说他老是因为这个项目从2014年就开始做了,直到2018年这个项目算是基本结束,整整做了4年多时间,现在隔三差五有些零星的小升级,这个项目可以说是我参加工作有史以来工期最长的一个项目,有人可能会问,多大的项目啊,尽然能做这么长时间?它是我公司一款核心主打移动app产品,随着用户需求的不断变化,功能的不断增多,做这么长时间,也就不足为奇了,我们天天使用的微信、支付宝哪个不是这样?

编码架构演变史:

原有项目工程架构为单一结构体项目,在这四年时间里,随着业务需求的不但变化,技术的更新迭代,导致了不同模块出现不同技术实现方案。从最开始的非标准的MVC架构,这种结构是最早些从事Android开发的人员通用的技术架构,有些人可能很奇怪,什么是非标准的MVC结构?因为这种结构Activity和Fragment即承担了View的角色又承担了Controller的角色,在项目开始的时候,我们不得不说,这种结构开发效率非常高,但随着业务功能的增多,导致整个Activity的代码量越来越多,使其变得极其臃肿。

为了解决Android开发中普遍出现的这种通病,2016年谷歌Android团队推出新一代Android应用编码架构MVP,一经推出就火变了大江南北,它将原来的Controller层进行了拆分,将一层拆分为两层:Presenter层和View层,这样一来我们整个Activity和Fragment工作量就减轻了不少,它只做View的工作,一些业务逻辑的工作就交给Presenter了。既然是google出品,必然是精品,为了顺应历史潮流,该项目在原有架构基础上也就引入了MVP架构,在研究了google MVP的demo后,我们发现能解决我们的大部分问题。

Model: 数据层,负责与网络层和数据库层的逻辑交互
View: UI显示层, 并向Presenter报告用户行为
Presenter: 从Model拿数据,应用到UI层,管理UI的状态,响应用户的行为
但是随着时间的推移,产品中出现一些新的业务需求,现有架构的一些缺陷也逐渐暴露出来,比如常常有这样的应用场景:在上传图片的时候,首先要去请求Token令牌,客户端拿到了令牌时候再去上传图片,其问题的本质就行一个网络请求回来之后才能进行另外一个网络请求,直接导致的一个问题就是回调嵌套太多,代码逻辑不清晰,这样的代码难以理解而且不利于以后的维护,有时候进入一个界面的时候,同时要进行两个后者两个以上的网络请求,那么这时候就出现问题了,Activity数据显示不同步,多个网络请求同时进行,他们必然是异步的,既然是异步的,毫无疑问有的请求回来早,有的请求回来迟,界面上的数据必然会出现不同步。这时候RxJava出现了,刚刚接触RxJava的时候,的确被它强大所惊叹,能将原来复杂的业务逻辑变得如此简单,在配合上Retorfit那就是绝配,直接就解决了我们上面提到的问题,简易的接口配置,优雅的代码结构,强大的扩展支持深受广大开发者的追捧。

从MVC架构到MVP架构,再从MVP在到MVP+RxJava+Retorfit,也就是现在我们的项目里存在着三种编码架构体系。虽然编码架构移在变,但唯一不变的是项目一直都是单一结构体项目,它的弊端在我这里我就不讲了,如果感兴趣的可以阅读我的另外一篇文章:Android组件化方案最佳实践,https://blog.csdn.net/geduo_83/article/details/86604852

网络请求演变史:

网络请求作为一个APP项目最基本的功能需求,在我们项目里http也经历了四次更新迭代。从最开始行业通用的AsyncHttpClient框架,再到google官方推出的Volley,在到国内技术大神严振杰在OkHttp基础上封装的NoHttp,再到square公司开源的网络请求框架的终结者Retrofit。

基本组件Activity演变史:

关于Activity基类结构也有着两种不同的架构体系,一种是基于ActionBar的架构体系,随着ActionBar的弃用,诞生了另一种是基于ToolBar的架构体系。

这就是目前这个项目的基本架构,给我们最直接的认识就是,各个模块技术解决方案不统一,正是由于功能模块多,项目周期长,新技术的更新迭代快,有没有足够的时间进行重构改造,必然会造成现在的单一结构体项目的多架构问题。 现在要抽取几个功能模块,的确不是一件很容易的事。原本打算按照现有新项目的架构:组件化+MVP+RxJava+Retorfit重新开发一遍,最后我放弃了,因为有些模块有着大量的业务逻辑,这工期可不是一星半点,最后经过商议,采取了一种折中的方案,编码架构保持不变,维持原状,功能模块原来以包来划分,现在以组件的方式从新进行拆分,这样一来工作量就大大降低了。

方案定了之后,开始实施了,抽取了一个公共的Common库,其中包含了有网络请求组件和项目基础组件,要移植的模块的资源文件散落在整个项目的各个角落,然后就是施展我们的VC大法了,这可不是好差事,这一周频繁的使用VC大法,一致出现了眼花,手腕酸疼的感觉。

通过这次的移植改造,再次给我们警醒,一个好的项目架构多么的重要,架构不统一,技术解决方案不统一,多个模块各自为政,给后期的维护和改造、扩展将是灾难性的。我们不得不感叹,在软件开发行业不像医生、律师这些知识相对稳定的行业,软件行业的技术没隔一段时间就会更新换代,让你清零,所谓“活到老,学到老”,用到程序员身上在适合不过了。

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

推荐阅读更多精彩内容

  • 一晃眼十三年,感恩你們一直不離不棄的守候。 在最迷茫的時候,你們給我勝過一切的鼓勵和信任。在最無助的時候,小爽放下...
    夢回吾夢阅读 275评论 0 0
  • 核桃树已经记不清是哪一年种下的,一直记得这树老不接核桃,有人讲要在树身砍一些刀印,才能接很多。 同年种...
    麻辣社工阅读 674评论 0 0
  • 2019年1月25日星期五(农历腊月二十)天气晴 昨天晚上临睡时,我就发现丫丫有点不太对劲,果不其然,睡到半夜,高...
    wzy知足常乐阅读 213评论 1 2
  • 18岁,一个不再如同16、17岁那般年少轻狂的年纪,大多数的我们,都在这一年经历着人生最为重要的两次转变――高考和...
    寂沁阅读 91评论 0 0
  • 先前有“间隔年”,现有美国作家琼•狄迪恩的《奇想之年》,《奇想之年》是琼•狄迪恩为了纪念逝世的爱人而写的一本回忆录...
    桃酥1618阅读 325评论 0 0