日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin 一种以服务为基础的APP架构及源码示例

發(fā)布時(shí)間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin 一种以服务为基础的APP架构及源码示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

由于工作原因,可能會(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è)可以簡單理解成“模塊化開發(fā)”中的模塊。每個(gè)模塊可以是一個(gè)頁面也可以是幾個(gè)頁面,以業(yè)務(wù)/功能劃分。
  • 除主工程外,每個(gè)模塊以aar包的形式向其他模塊提供業(yè)務(wù)/功能
  • 每個(gè)模塊分為四個(gè)部分,這四個(gè)部分分別又是4個(gè)arr。
  • Service: 業(yè)務(wù)接口定義
  • ServiceImpl: 業(yè)務(wù)接口具體實(shí)現(xiàn)
  • ViewService: UI接口定義
  • ViewServiceImpl: UI接口具體實(shí)現(xiàn)
  • 所有業(yè)務(wù)統(tǒng)一管理,針對到**每個(gè)**APP,在主工程Application中注冊具體實(shí)現(xiàn)
  • 腳本打包,代碼管理
  • 我的一些個(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。