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