34 | 聊聊重构:优秀的架构都是演进而来的
张绍文
该思维导图由 AI 生成,仅供参考
每个程序员心中都有一个成为架构师的梦想,那成为架构师这个目标是否“遥不可及”呢?从我的工作经历来看,我一共负责过搜狗输入法、微信等 4 款亿级产品的架构工作,可能有同学会好奇这些大型的 App 是如何做架构设计的。从我接手的这些应用的现实情况来看,看似光鲜的外表下都有一颗千疮百孔的心:各种日志随便输出、单例满天飞、生命周期混乱、线程乱创建、线程不安全这些问题随处可见。
所以你可以看到每个大型应用都背负着沉重的历史技术债务,架构师很重要的一项工作就是重构“老态龙钟”的陈旧架构。在接下来的“架构演进”模块中,我们一起学习架构该如何的重构和演进,帮助我们及时偿还这些“历史债务”。
虽然我们天天都在谈“架构”,那你有没有想过究竟什么是架构呢?
什么是架构
什么是架构,每个人都有自己的看法。在我看来,所谓的架构就是面对业务需求场景给出合适的解决方案,使业务能够快速迭代,从而达到“提质增效”的目标。
我先举个例子,告诉你什么是架构,以及架构的作用。我曾经为了解决 UI 渲染卡顿这个需求场景,我们设计了异步创建 View、异步布局与主线程渲染这个架构。不过架构只是设计的抽象,对于具体的实现,我们可以称之为框架。好的框架可以隐藏大家不需要关心的部分,提升我们的效率。例如 Facebook 的 Litho、微信的Vending,它们通过框架约束和异步来解决 Android 应用 UI 线程卡顿问题。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了架构师在大型应用中的工作经历和对架构设计的看法。作者首先强调了架构的定义,认为架构应该为业务需求场景提供合适解决方案,使业务能够快速迭代,达到提质增效的目标。接着,文章深入探讨了Android的架构设计,包括Java API接口层、硬件抽象层和应用层,以及Android系统为满足用户、开发者和硬件厂商需求而设计的特点。此外,文章还介绍了如何进行架构选型,包括考虑框架的成熟度、工具链的成熟度和人员的学习成本等因素。最后,作者以微信和淘宝的模块化改造为例,说明了架构设计应该与团队规模相匹配的重要性。整体而言,本文通过实际案例和技术细节,深入浅出地介绍了架构设计的重要性和实践方法,对于想要了解架构设计的读者具有很高的参考价值。文章内容涵盖了架构演进的必要性、如何进行架构演进以及架构设计能力的培养,为读者提供了全面的技术视野和实践经验。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》,新⼈⾸单¥59
《Android 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- 大土豆逆向微信的过程中,发现微信很多架构都看得到历史变迁,比如说微信加密的主库中,几十张表,表名和字段名都命名有大小写驼峰,有小写下划线。微信App内部的私有协议中,有纯二进制协议,有二进制和文本混合(朋友圈snsinfo表的blob类型的字段),有纯文本协议的,纯文本的又有json的,有xml的,还有用冒号隔开内容的自定义格式的。
作者回复: 微信数据表初期的设计的确有那么一些问题,但是考虑到迁移的成本太高,所以一直都没有彻底去搞
2019-03-2110 - CoderAndy记得自己15年刚入行的时候,小公司一个人负责Android客户端的开发,觉得把控项目的技术方案算是架构;后来去某直播平台上10+人的Android项目组觉得把写出优秀的框架也算架构;现在我我觉得架构真的像作者说的无处不在,一个小的需求,不同人的实现是可能有差别的,而且同一人在不同的环境和技术积淀下也会不同。所以,以求更好方为上策。
作者回复: 是的,架构无处不在,每个人对架构的理解都可以不同
2019-03-229 - gk但是在最终产物上,组件化已经回归模块化…能举例说明下什么样算回归模块化,另外组件化会有什么问题?烦请有空解答下
作者回复: 组件化是有远程下发的能力,模块化只是工程组织上面的“组件化”。 这个主要因为有类似小程序、rn/weex、h5离线宝、flutter等多种手段去实现那些非核心功能
2019-07-104 - Akon Convict我一直认为架构是一个很抽象的话题,别人只能分享他们当时特定的困难下如何解决问题,从而演变出现在稳定高效的框架,我们能汲取的只是他们思考问题的方式,出现问题的根源是什么,有什么方式可以解决,这些解决方案中哪些是优秀的方案。
作者回复: 每个人对架构都有不同的理解,但是架构核心也是为了解决质量和效率问题
2019-03-213 - 大土豆微信的db读写,不知道你们是怎么做的😄,我现在IM的架构是读写全在主线程(主线程io没有大家想象的这么可怕,只是数据量多的时候,还是会卡),我现在的想法是下个版本改成一个线程专门写,然后读可以多线程读
作者回复: I/O都是不可预料的,数据库读写都不会在主线程,如果用户数据量大的情况会很慢的
2019-03-212 - 邱逢生Github搜索不到vending?
作者回复: 这个框架并没有开源
2019-04-20 - OF这大土豆可真行。。。2019-09-028
- 问答高屋建瓴,很棒2019-03-212
- JeffMony文章讲得非常好,设计一个架构并不是非常高大上的项目,只是一种设计思想,很小的模块也可以体现搞抄的架构设计思想;受教了。2020-03-121
- 1一个技术人的一生应该有个代表作,给自己的技术生涯一个交代。读后感觉醍醐灌顶。感谢绍文老师!2019-07-191
收起评论