安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

看完这篇文章,带你彻底理解Android架构

6月14日 夜未央投稿
  用本篇文章理论知识和架构原则实践了一个wanAndroid项目,其中全部采用kotlin编写并抛弃了Rxjava,因为kotlin可以完全替代他,github本项目中汇总了业界知名的架构文章和一些项目帮你彻底理解架构。后续本项目将持续更新,并完善wanAndorid的所有功能。还会用23种设计模式在项目中实践,彻底理解设计模式在业务场景中的使用。一、什么是架构
  1。1架构介绍
  架构究竟是什么?如何更好的理解架构。我们知道中国文字博大精深可以说从文字的组成就能理解其含义。架构也不例外架构是由架、构组成。
  架:建造、搭设、支撑。简称:整体结构。
  构:屋宇、供人居住的木、砖瓦构筑物。简称:组件。
  整体结构和组件的组合就形成了架构。以Android架构为例子,一个APP通常是由class(类)组成,而这些class之间如何如何组合、相互之间如何发生作用,则是影响这个APP本身的关键点。细分的话可以分为类、接口(连接器)、任务流。所谓类就是组成架构的核心砖瓦,而接口则是这些类之间通讯的路径、通讯的机制、通讯的期望结果。任务流则是描述系统如何使用类和接口完成某一项需求比如:一次网络请求。上面介绍架构中提到了房屋、木头、砖瓦可见架构和建筑有着彼此的联系。
  1。2建筑学
  上世纪60年代已经设计软件架构这个概念了,到了90年代软件架构这个概念才开始流行起来。而计算机的历史开始于上世纪五十年代相比建筑历史就非常短暂了,建筑工程从石器时代就开始了。人类在几千年的建筑设计实践中积累了大量的经验和教训,建筑设计基本上包含两点,一是建筑风格,二是建筑模式。独特的建筑风格和恰当选择的建筑模式,可以使它成为一个独一无二的建筑。
  下图的照片显示了古代玛雅建筑:ChichenItza,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。所有的数字都如日历般严谨,风格雄浑。难以想象这是石器时代的建筑物。
  英国首相丘吉尔说,我们构造建筑物,建筑也构造我们,英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。二、架构设计目的
  几乎所有的软件设计理念都可以在浩瀚的建筑学历史中找到。许多人认为形式必须服从功能(你认同这种观点吗?欢迎在评论区留下你的看法)。而好的设计既有形式又有功能。比如我们的北京大兴国际机场大兴机场以航站楼为核心向四周延展从空中俯瞰就像是一只展翅欲飞的凤凰,以航站楼核心区为中心,分别向东北、东南、中南、西南、西北五个方向伸出了五条指廊,通往北京大兴国际机场的飞行区。这种从中心向四面八方延伸的设计,使航站楼中心点到最远端登机口的距离只有600米左右,旅客步行前往最多只需8分钟。
  建筑的设计又有一定的目的性,而软件架构设计也同理。软件架构目的性大致可分为可扩展性、可定制化、可伸缩、可维护性:可扩展性:APP必须能够在用户的UVPV数量快速增加的情况下,保持软件合理的性能。只有这样在快速的从0到1的需求迭代中才能后顾无忧。可定制化:在同一个软件系统中可能面向的用户群体是不同的、多样的,需要满足根据用户群的不同和市场需求的不同进行定制化。比如一个APP中某些功能只针对特定用户开放。可伸缩性:在新技术出现的时候,一个软件系统应当允许接入新技术,从而对现有系统进行功能和性能的扩展。可维护性:软件系统的维护包括两方面,一是修复现有的bug,二是将新的迭代需求开发到现有系统中去。一个易于维护的系统可以有效地降低人力和物力。三、实践一个APP:玩Android
  针对上面对架构的介绍,相信已经从陌生走向熟悉了。但是最重要的还是实践,伟大的毛主席曾经说过你要想知道梨子的滋味,就要亲口尝一下。因此借用了wanAndoird开放API简单实现一个APP并概括上述架构的关键点,主要的功能点如下:首页是热搜文章的分类列表。项目页面主要包括完整项目。文章、项目点击可以查看详情。
  不知道还有没有印象上文提到了架构形式必须服从功能当然这不是权威的定义,可以作为参考。我们先不管是形式服从功能还是功能服从形式,可以结构化思维理解下这句话,架构大致可分为:形式、功能所以我们依次按照此两点进行搭建wanAndroid项目。
  3。1架构形式
  从形式本身而言包括两部分。一是事物外在的形状,二是内在的结构、组合方式。实际上,这两者为同一。内容如何内在组合,对外就自然有某种表现的形状。
  我们打开项目的第一眼接触到和看到的就是我们项目的目录结构,更清晰更简洁的目录结构可以使我们更快的上手项目。这里主要分为两部分核心模块、业务功能模块:
  核心模块主要有以下职责:Dagger依赖注入处理。扩展功能:各种utils。基础层的抽象:BaseActivity、BaseViewModel等。第三库处理、网络异常处理等。
  业务功能模块主要有以下好处:高内聚性。清晰的功能结构。模块化。功能隔离并封装。
  在主APP下进行了core、features的划分,业务模块并没有按照模块化的形式进行多moudle拆分而是聚合在features下,以包的形式进行了聚合,这样做的好处如下:更快的编译速度。减少maven库的依赖冲突。通用功能的重用性。包的内聚力。
  可以看到我们并没有采用按照业务module进行模块化划分,因为我之前接触过一个项目拆分了40多个module可想而知项目一旦庞大起来坏处也就暴露出来:编译一次项目高达78分钟项目中的moudle依赖纵横交错。
  当然我并不反对多module模块化的存在,因为任何模式都有利有弊,这取决于当前的项目的业务来抉择使用那种形式。此外项目中全部采用kotlin编写:build。gradle。kts。kts也是官方推崇的可以使gradle更加简化。buildSrc来处理gradle依赖。
  3。2架构功能
  在玩Android中的业务点功能点主要有文章、项目获取,而这些功能点大部分都离不开网络请求和回调处理。这里不再描述MVC、MVP、MVVM的区别和如何选择,但是我可以说明一点是任何架构模式都没有最好、最优,只有最适合当前业务的才是好架构。现在google官方推崇的架构主要是MVVM所有我们主要说下MVVM。
  MVVM架构模式满足上文我们描述符合的架构设计的目的,同时也遵守了官方给定的架构原则,架构原则大致有两点如下。可能光看这两个定义可能不太容易理解。所有我们用结构化思维的方式理解下,关注点分离就是将复杂问题做合理的分解,再研究分解的侧面,最后合成整体的解决方案。因此我们在Activity或Fragment不应该做业务逻辑而是把功能点拆分成需要最小的最优解,最后合并成整体方案。比如mvvm我们衍生出ViewModel、LiveData、Model等。关注点分离Activity或Fragment中的代码应是处理界面和操作系统交互的逻辑应使这些类尽可能保持精简,这样可以避免许多与生命周期相关的问题。通过模型驱动界面模型是负责处理应用数据的组件。它们独立于应用中的View对象和应用组件,因此不受应用的生命周期以及相关的关注点的影响。
  MVVM中每个组件仅依赖于其下一级的组件如:activityviewMoudleRepository。这时候你可能有疑惑,如果是单向依赖那网络请求的回调怎么处理?这里引出一个概念响应式编程结合liveData做处理其内部是观察者模式,并且关联视图的声明周期如:Activity、Fragment或Service。使用LiveData的好处如下:不会发生内存泄漏观察者会绑定到Lifecycle对象,并在其关联的生命周期遭到销毁后进行自我清理。不会因Activity停止而导致崩溃如果观察者的生命周期处于非活跃状态(如返回栈中的Activity),则它不会接收任何LiveData事件。不再需要手动处理生命周期界面组件只是观察相关数据,不会停止或恢复观察。LiveData将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。
  3。3UseCase
  UseCase是Clean架构中的一个概念,其中主要用于UI和数据层的连接同时也会进行IO的切换,这里可以看到本项目抛弃了Rxjava因为他完全可以用Kotlin来替代。abstractclassUseCaseoutType,inParamswhereType:Any{abstractsuspendfunrun(params:Params):EitherFailure,Type{operatorfuninvoke(params:Params,onResult:(EitherFailure,Type)Unit{}){valjobGlobalScope。async(Dispatchers。IO){run(params)}GlobalScope。launch(Dispatchers。Main){onResult(job。await())}}classNone}
  3。4一个完整网络请求流程
  View:一个网络请求的发送并订阅,处理UI数据。
  ViewModel:为View(ActivityFragment)提供数据,并处理业务逻辑。
  LiveData:具有生命周期可观察的数据存储器类,LiveData存储在ViewModel中。
  UseCases:用于连接ViewModel和Model,并更新LiveData。
  Model:可以从网络、数据库或其他API获取数据。四、总结
  我们可以体会到从架构理论定义到实践的过程相信你有了自己的理解和见解,但这只是一种实现方式,如果在满足架构设计目的和架构原则的情况下你有更好的实践方式或者有任何和架构项目的疑问点都可以在评论区或者Github中留言讨论。这里我也有个疑问点就是:你认同形式必须服从功能吗?欢迎留下你的见解。
  后续本项目将持续更新,并完善wanAndorid的所有功能。还会用23种设计模式在项目中实践,彻底理解设计模式在业务场景中的使用,欢迎持续关注。当其他的平台如后端、前端架构的搭建都是殊途同归的。但是我还是有几点建议:业务决定架构。不要过度设计。面向接口编程。形式需服从功能。
  项目:
  https:github。comblindmonkWanArchitecture
  最后,在这里我再分享一份由多位大佬亲自收录整理的Android学习PDF架构视频面试文档源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
  这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
  当然,你也可以拿去查漏补缺,提升自身的竞争力。
  如果你有需要的话,只需私信我【进阶】即可获取
投诉 评论 转载

企业实行OKR工作法会带来哪些好处?企业实行OKR工作法会带来哪些好处?OKR是Objectivekeyresults缩写翻成中文叫做目标和关键成果法。O,即Objective,目标KR,即ke……看完这篇文章,带你彻底理解Android架构用本篇文章理论知识和架构原则实践了一个wanAndroid项目,其中全部采用kotlin编写并抛弃了Rxjava,因为kotlin可以完全替代他,github本项目中汇总了业界……微信推出新功能专治老赖不知道大家有没有遇到过借钱不认账的情况,可能不还钱的情况比较多,不认账的少吧。大部分不是不认,就是不还钱,你说什么都不还。但是借钱也不是随便就借的,很多时候基本是对方打电……美日芯片同盟剑指2nm,美半导体朋友圈再缩小电子发烧友网报道(文吴子鹏)对于美国半导体的圈子文化,电子发烧友网曾经有过专门报道,在题为《美国大搞IC圈子文化,多个联盟先后成立,中国芯要警惕这个问题》文章中,笔者着重分析了……互联网纳税第一户诞生每天上税1。4亿,还创造3700万个就业2018年纳税516亿元,平均每年纳税1。4亿,再创新记录!4月1日,阿里巴巴公布了2018全年纳税情况,阿里巴巴集团和蚂蚁金服集团合计纳税额成为互联网公司第一名。……SAP(SAP。US)宣布收购营运资本管理解决方案提供商Ta智通财经APP获悉,1月27日,SAP(SAP。US)宣布,公司计划收购营运资本管理解决方案提供商Taulia的多数股权。该交易的财务细节尚未披露。SAP表示,此举旨在让……山东学校招标信息中标公告哪里查?统一查询可以通过四库一平台或当地政府的官方网站。除此外也可使用第三方网站,例如建管家,在首页上就有查中标业绩的选项,点击进入后输入相关信息即可查询。一方面,官方平台可以去……AGONAG274QX电竞显示器,吹响胜利号角的绝佳利器导读AGON这名字你一定听过看过,它是AOC的专业电竞品牌,同时它们家的显示器也是不少电竞选手的最爱!网红的设备中也能看见AGON的身影。在过去,FPS射击类游戏显示器几……JavaScript首位添加元素在数组arr开头添加元素item。不要直接修改数组arr,结果返回新的数组注意:不直接修改数组!不直接修改数组!不直接修改数组!concatfunctionprep……用了11年的QQ靓号是否应该放弃?感谢您的阅读!我的QQ号码是在我高中的时候申请的。虽然我的QQ号码是9位数,并非是非常经典的5位数。但是我认为我的QQ号码伴随我的时间还是相对比较长的。很多人……长续航独立通信,vivoWtach2即将发布Vivo于去年9月发布了其首款智能手表,命名为了VivoWatch。这款手表即将迎来继任者VivoWatch2,主打长续航及独立通信。从vivo发布的海报来看,vivoW……新一代特供版丰田皇冠曝光!网友这不是比亚迪汉吗?自从丰田皇冠这款经典的车型在国内市场停产停售之后,在海外亮相了很多个版本的丰田皇冠,但直至丰田皇冠陆放这款全新一代的中型SUV进入到国内市场,全新一代的丰田皇冠轿车也并未露面。……
日媒日本专业机构解剖华为高档智能手机中国产零部件占六成进步不装热水器要接地线吗?许家印和雷军登顶,王兴却只能在广场晃悠,他们不一样在哪?2022华为mate20还能再战3年吗?这是关于小鹏P5的一手试驾体验,手撕对手的底气够吗?个人信息保护法草案将三审对APP过度收集个人信息大数据杀熟等预售38。89万起极狐阿尔法S华为HI版亮相激光雷达很抢眼辽宁人勇救落水娃本报联合阿里天天正能量奖励5000元K12教育之AI智能应用讨论电视机是如何传入中国的?当时人们是怎么接受这个能装任何东西的手机买8GB还是12GB内存?老师傅详细讲解,早知道该多好午间券商医疗5G等板块看法及今日操作将近50岁的莫文蔚在拉萨歌唱并获奖,稀薄的氧气很致命生病的日子夏季细菌易滋生冰箱冷藏食物卫生要注意如何刷流量淘宝店如何刷流量如何安全地刷流量儿童折叠推车能带上飞机吗宛然的造句个人职业生涯的思路与方法关于职业生涯规划的原则2021年度甘肃省科技功臣奖和自然科学特等奖花落兰州大学六一儿童节伊思红参蜗牛霜和白色的区别红色款和白色款哪个更好项链戴久了会变黑吗?项链时间长了会变黑吗苹果手机id可以查定位吗(怎么定位iphone手机位置)

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利