一款基於Kotlin+MVP+組件化的麻雀App

爲何叫麻雀前端

麻雀雖小,五臟俱全。java

其實本app並不叫作麻雀,只是本人認爲它比較符合麻雀的特色:小而全。ios

小,即輕量級,一是指app只專一於實現常見app基礎的邏輯業務功能,並無在某個功能點或者UI上作更爲細節的實現;二是指app使用了簡潔的的Kotlin語言做爲實現語言,使用了相對簡單的一種MVP實現方式,使用了一種比較輕量級的組件化方案。git

全,固然是相對的,一是指app的後端也是本人開發,這能讓整個業務邏輯更爲全面,也能讓感興趣讀者能更爲全面的瞭解此app;二是指app涉及了當前技術趨勢下安卓開發的多個技術點,包括kotlin,mvp,組件化,rxjava,retrofit等;三是指本app實際上能夠做爲一個快速開發框架,這主要得益於組件化的實現,具體怎麼使用,後續會提到。github

此app名字不叫麻雀,而是叫作KtDevBox。shell

倉庫地址:編程

App實現-KtDevBoxjson

後端實現-KtDevBox-backend後端

爲何要寫這個app網絡

誠然,網上關於Kotlin,MVP,組件化的研究、分享已經有不少,可是多數博客僅僅是泛泛而談,代碼庫沒有提供不說,博客中的代碼甚至都有問題,有些更是抄來抄去。雖然有些好資源的確有挺好的借鑑意義,好比KotlinMvpReading等【本文僅着眼於項目級別實現,一些好的library並不在此討論中】,但如下幾點仍是讓我以爲有些不足:

  • 這些項目的接口,基本都是爬來的,大多數都是get方式實現,很難造成比較完整的一個功能邏輯,也很難從更全的角度去來展現某些技術點的實現;
  • Kotlin的使用,Java的味道較重,特別是網絡請求的封裝部分;
  • 組件化幾乎沒有涉及,項目是個app,並不能方便的轉爲另外一項目的實現框架;
  • 文檔等介紹略少

KtDevBox固然也存在的一些不足,但該項目的初衷,也僅作學習交流之用,以期對該方面技術的發展,起到一點點幫助。

爲何用Kotlin

僅說本身體會,至少有這幾個緣由吧:

  • 語言切換,對老手真不是問題,何況kotlin與java的兼容性很好,因此學習成本不該做爲不使用kotlin的理由;
  • 真正擺脫了控件從佈局到使用的查找問題,簡潔明瞭;
  • 函數地位的提高,帶來的編程思想的改變,對開發者開發思惟是有提高的,固然,代碼的靈活、更好的擴展是可視的效果;
  • 閉包、擴展函數、命名參數等語法糖帶來的諸多便利。

爲何用MVP

有關MVP的討論真是太多了,不過正如本人以前的博客提到,MVX無論怎麼叫,核心在於分層,至因而C、P或是VM,要看項目自身狀況來,甚至能夠在同一項目中出現。本項目使用的是MVP的一種簡化些的實現方式,至於好很差用,仁者見仁,這裏只談使用,不談優劣,手動滑稽。再簡略叨叨下MVP的發展吧,以表緣由。

  • MVC中C重,因而功能轉移,出現來了xxModel、xxLogic黨,主要分擔數據獲取的職責;
  • C和xxModel的強依賴、空指針問題和內存泄露問題,促進了Presenter的出現,其主要處理業務邏輯,並綁定View的生命週期,面向接口,更爲鬆耦合;此時C轉爲P。
  • 徹底面向接口以後,難以免的V和P接口爆炸,也過於分散,出現了Contract,人工約束,首見於github上谷歌的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編程,手動哈哈,另外一個話題)。

在這裏插入圖片描述

主要使用的第三方庫

感謝:

本項目僅作學習交流之用。

倉庫地址:

App實現-KtDevBox

後端實現-KtDevBox-backend

喜歡請記得Star一下。

後續還有更爲詳細的項目介紹。

最後,可能有些童鞋還對下面這張圖感興趣。不過,本文只談技術,不談「風月」,微笑。

在這裏插入圖片描述
相關文章
相關標籤/搜索