地址
https://github.com/meybeBlank/FengArchitecture
前言
Android做了兩三年,每次都是用的別人的架構,中途也抽時間看過項目的框架的東西,一知半解,虎頭蛇尾。自己沒有從0到1的過程,能力沒法引起質變,始終還是半吊子,年初打定主意把熱門的Retrofit之類全都系統的親手敲一遍。由經歷了找工作遇到坑,再找工作安定下來的一言難盡,最後弄完已經到了年尾。這裏做一個簡單自我總結,以及自己的一些設想。
結構
目錄
base: app基礎的類、接口
common: 基礎的第三方控件、自定義控件
di:Dagger2基礎依賴 以及 業務Module
http: 網絡依賴 retrofit rxjava
utils:工具類
bussiness:具體業務。
contract:MVP契約類 VP接口信息
model:數據倉庫和JavaBeans
modules:service broadcast等組件
ui:略
Key:
Business1Module:某個Business具體業務P、V層組件提供。創建具體的Presenter與View都需要在這裏進行註冊。
B1Repository:某個Business具體數據倉庫,對Service數據進行了基本處理。
ServiceModule:某個Business具體的網絡Service,提供最原始的Retrofit Service。
BaseActivity:實現HasFragmentInjector接口解決DaggerActivity的侵入性問題。
PresentUtil:反射的方式 通過註解{@link APresenter}綁定Presenter與View。
使用
創建Contract,實現具體的Presenter與View,在BusinessModule註冊。
創建Service,在ServiceModule註冊。創建Repository,並別忘了@Inject。
其他也沒啥需要說的了,可以看項目裏面的兩個簡單頁面。
最後
當然,還有一些問題待解決。
沒有模塊化,第一次完整的籌備一個比較成熟的架構,因爲平時遇到的項目不夠大,實際用不到模塊化的東西,也就沒有考慮。
P層粒度不好把控,MVP的一點兒小瑕疵,這裏粒度分得比較細。
PresentUtils使用反射的方式進行綁定PV,不知道是否可以用APT代碼生成的方式降低性能損耗。
Presenter的Scope,爲了Component提供Contract.Presenter接口,讓View不依賴具體實現而依賴接口,但是AppComponent有不能同時支持@Single 和 @Activity,所以這裏Scope有一點兒小瑕疵。
之後具體使用再進一步進行優化吧。
同時也要感謝:
開源接口提供:https://www.jianshu.com/p/e6f072839282
大牛朋友:Rhett Lee
以及提供blog、源碼學習的童鞋些。