Kotlin 一种以服务为基础的APP架构及源码示例
前言
由于工作原因,可能會(huì)被調(diào)到隔壁組。此架構(gòu)為隔壁組leader設(shè)計(jì),并不是我原創(chuàng),已取得leader同意,此博文只分享我對此架構(gòu)的理解。特此聲明。
最近看了下Kotlin的一些語法,外加隔壁組采用非常規(guī)MVC/MVP/MVVM開發(fā),所以寫此Demo,一是為了練習(xí)Kotlin語法,二是為了嘗試使用隔壁組架構(gòu)進(jìn)行開發(fā)。由于為了練習(xí)Kotlin語法,所以在代碼的具體實(shí)現(xiàn)上,可能會(huì)有些“炫技”的語法。比如能用一種語法實(shí)現(xiàn)的功能,Demo用了兩種及以上的語法。了解即可,不必深究。還有一部分“非常規(guī)”操作,比如直接就能實(shí)現(xiàn)的功能,具體實(shí)現(xiàn)上卻“山路十八彎”,注意,這不屬于“語法炫技”的范圍!如果覺得“這里不用山路十八彎”,請往架構(gòu)方面考慮。
Kotlin
這是一款壁紙應(yīng)用,雖然功能比較簡單,但是用Java代碼實(shí)現(xiàn)起來還是有些代碼。除去框架部分,用kotlin實(shí)現(xiàn),能省很多代碼。比如屬性定義、finViewById、lambda、協(xié)程、閉包等等。代碼的具體實(shí)現(xiàn)沒撒好說的,還請自行查看源碼。本文的重點(diǎn)是下個(gè)部分“服務(wù)架構(gòu)設(shè)計(jì)”。
服務(wù)架構(gòu)設(shè)計(jì)
由于公司產(chǎn)品比較多而小,并且有很多共通的功能點(diǎn),現(xiàn)比較流行的MVC/MVP/MVVM開發(fā)模式,運(yùn)用到實(shí)際開發(fā)效率不高,所以leader設(shè)計(jì)了一套開發(fā)模式供我們這些菜雞使用。在開發(fā)/維護(hù)效率上,簡直是賊高!有多高?去年Android組5個(gè)人,iOS有25+個(gè)。真正的一打五,恐怖如斯!
總體設(shè)計(jì)
我的一些個(gè)人理解
- 模塊:不吹不黑,總體設(shè)計(jì)里就是我對模塊的理解…
- 主工程:一般代碼很少,只放“主頁”相關(guān)相關(guān)的幾個(gè)類,甚至主頁對應(yīng)的service/serviceImpl都會(huì)提供相應(yīng)的aar。
模塊四元素,四元素遵循“面向接口編程”的理念。每定義一種業(yè)務(wù)/功能時(shí),先定義好接口規(guī)范,這樣的話,在其他相似模塊或者其他APP相似功能的時(shí)候,接口是不用修改的,只需要復(fù)用或者重寫接口具體實(shí)現(xiàn)即可(開閉原則)。這樣的話,還有一些好處,合作開發(fā),AB模塊通過接口調(diào)用,有效降耦合,而且AB模塊的開發(fā)者并不需要知道對方具體實(shí)現(xiàn)。
- Service:業(yè)務(wù)接口定義,我理解的這個(gè)模塊大概相當(dāng)于MVP中的P層。
- ServiceImpl:業(yè)務(wù)接口具體實(shí)現(xiàn),大概相當(dāng)于P層的具體實(shí)現(xiàn)。P中會(huì)持有V的引用,但這里不會(huì),Service/ServiceImpl只負(fù)責(zé)業(yè)務(wù)的定義/實(shí)現(xiàn)。至于之后做什么,我不管我不管。
- ViewService:UI接口定義,定義當(dāng)前模塊有什么UI相關(guān)的功能/業(yè)務(wù),比如掃碼、登陸等等。
- ViewServiceImpl:UI接口具體實(shí)現(xiàn)。在單APP中作用不是很大,多APP相似UI的時(shí)候,效率提升巨大。
四元素是此框架很精髓的部分,開發(fā)效率高很大一部分是由于四元素的設(shè)計(jì)。對于不同APP差別不大的模塊,可使用相同業(yè)務(wù)/UI接口,具體APP編寫具體實(shí)現(xiàn)即可。
- 業(yè)務(wù)管理:由于多個(gè)APP的很多業(yè)務(wù)/UI接口是差不多的,只是業(yè)務(wù)/UI實(shí)現(xiàn)上會(huì)有些差別,所以針對到不同的APP,注冊進(jìn)相應(yīng)的業(yè)務(wù)/UI接口實(shí)現(xiàn)即可,甚至有些具體實(shí)現(xiàn)也是可復(fù)用的。
代碼管理:每個(gè)APP會(huì)有很多模塊,每個(gè)模塊下又有四元素,每個(gè)模塊和四元素都是module/app的形式,AS每次都去構(gòu)建的話,估計(jì)一次打包沒個(gè)十來分鐘搞不定,所以代碼管理采用SNAPSHOT+AAR的形式,將每個(gè)AAR以SNAPSHOT的形式依賴,這樣就不用頻繁build每個(gè)module/app,每次更新,只更新相應(yīng)的SNAPSHOT即可。
我理解的大體架構(gòu)大概就是上面所描述的,當(dāng)然,為了解耦還會(huì)有一些其他的小技巧,不過這些無傷大雅,demo中也體現(xiàn)了一部分,感興趣可以看下壁紙Demo。
壁紙APP的說明
壁紙APP有兩個(gè)界面:“主頁”和“預(yù)覽頁”,也可以理解為兩個(gè)模塊:“主頁模塊”和“預(yù)覽模塊”。為了圖方便也為了方便讀者看代碼,這里沒有將對網(wǎng)絡(luò)框架的封裝、Util類封裝成通用AAR庫,沒有將預(yù)覽模塊寫成單獨(dú)的module/app,沒有將每個(gè)service/serviceImpl寫成單獨(dú)的module/app。說來有些諷刺,比較精髓的部分居然被我一筆略過,這點(diǎn)讀者明白即可。
碎碎念小心得
對我而言,架構(gòu)這個(gè)東西說起來有些縹緲的感覺。之前照著現(xiàn)有的MVX模式照搬,鮮有考慮為什么要這么寫?好處是什么?或者說只是看了別人的講解-這么做有bulabula好處。但生搬硬套始終是有些生硬,自己理解甚至能設(shè)計(jì)出合理的架構(gòu)才是王道。這也是我非常佩服leader的地方,我有些覺得這已經(jīng)超出了“小聰明”的程度,堪稱智慧了。我也在下意識(shí)提升自己這方面的能力,一起努力吧~
Demo下載
壁紙APPDemo: https://github.com/yikousamo/wallpaper
總結(jié)
以上是生活随笔為你收集整理的Kotlin 一种以服务为基础的APP架构及源码示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作405-关于vue组件开发过程中一直
- 下一篇: 利用AWVS进行反制