爲何叫麻雀前端
麻雀雖小,五臟俱全。java
其實本app並不叫作麻雀,只是本人認爲它比較符合麻雀的特色:小而全。ios
小,即輕量級,一是指app只專一於實現常見app基礎的邏輯業務功能,並無在某個功能點或者UI上作更爲細節的實現;二是指app使用了簡潔的的Kotlin語言做爲實現語言,使用了相對簡單的一種MVP實現方式,使用了一種比較輕量級的組件化方案。git
全,固然是相對的,一是指app的後端也是本人開發,這能讓整個業務邏輯更爲全面,也能讓感興趣讀者能更爲全面的瞭解此app;二是指app涉及了當前技術趨勢下安卓開發的多個技術點,包括kotlin,mvp,組件化,rxjava,retrofit等;三是指本app實際上能夠做爲一個快速開發框架,這主要得益於組件化的實現,具體怎麼使用,後續會提到。github
此app名字不叫麻雀,而是叫作KtDevBox。shell
倉庫地址:編程
App實現-KtDevBoxjson
爲何要寫這個app網絡
誠然,網上關於Kotlin,MVP,組件化的研究、分享已經有不少,可是多數博客僅僅是泛泛而談,代碼庫沒有提供不說,博客中的代碼甚至都有問題,有些更是抄來抄去。雖然有些好資源的確有挺好的借鑑意義,好比KotlinMvp、Reading等【本文僅着眼於項目級別實現,一些好的library並不在此討論中】,但如下幾點仍是讓我以爲有些不足:
KtDevBox固然也存在的一些不足,但該項目的初衷,也僅作學習交流之用,以期對該方面技術的發展,起到一點點幫助。
爲何用Kotlin
僅說本身體會,至少有這幾個緣由吧:
爲何用MVP
有關MVP的討論真是太多了,不過正如本人以前的博客提到,MVX無論怎麼叫,核心在於分層,至因而C、P或是VM,要看項目自身狀況來,甚至能夠在同一項目中出現。本項目使用的是MVP的一種簡化些的實現方式,至於好很差用,仁者見仁,這裏只談使用,不談優劣,手動滑稽。再簡略叨叨下MVP的發展吧,以表緣由。
我的認爲,M結構相對很穩定,View並沒有太大必要經過持有P的接口引用去使用P,再者經過Contract的維護並不能真正下降接口太多形成的注意力分散問題。本項目app的MVP實現較爲簡單些,也是一種比較常見的方式,具體可閱讀項目代碼。
爲何用組件化
組件化是近兩年才較爲突出的一種項目管理實現方案,本人認爲其符合基本的分而治之的思想,是同MVX同樣,應該出如今任何一個打算長期維護的項目中的技術方案。其實,不只在安卓端,在ios端、前端(Vue)、後端(Java、Python)都有組件化的使用。至於什麼是組件化,組件化有什麼好處以及如何實現,我想網上有太多優秀博客和開源庫說起,這裏就再也不贅述。
本app雖然小,但也涉及了組件化,選擇的是一種很輕量級、侵入性小的方案--Appjoint,方案雖然輕量級,可是本人認爲:組件化思惟,入侵性小、能在最初的時候將業務進行組件化管理是組件化的核心,而這個庫很好的符合了要求。
主要功能點
項目架構
項目核心架構如圖所示:
項目中的shell只含有MyApplication這一個類文件,目前app涉及的業務也僅usercenter和media這兩個module,其中usercenter和module並沒有依賴關係。所以,此項目徹底能夠做爲一個快速開發框架。簡單作法:新建幾個module編寫自身的業務,僅須要被shell依賴,它們並不會受到原業務usercenter和module的影響。而後更改入口Activity以後,就是一個新項目,也不會被打包進apk中。更多組件化的使用可見Appjoint的介紹。
目錄結構
每一個組件和通常app的目錄結構基本一致,主要多出了一個package,用來盛放與其它組件通訊用到的類,項目中media組件有實例展現。
router庫的結構以下圖,其中每一個組件都單獨擁有一個package,裏面分別盛放組件間通訊的服務接口和共享的數據(組件通訊數據實體類,或者面向json編程,手動哈哈,另外一個話題)。
主要使用的第三方庫
感謝:
本項目僅作學習交流之用。
倉庫地址:
喜歡請記得Star一下。
後續還有更爲詳細的項目介紹。
最後,可能有些童鞋還對下面這張圖感興趣。不過,本文只談技術,不談「風月」,微笑。