一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

從零開始的Android新項(xiàng)目1

 圖書館送餐人員 2016-03-16

最近一直在忙新項(xiàng)目的事情,所以有的坑一直沒填?!,F(xiàn)在看來可能一時(shí)半會兒還填不了,倒不如記錄一下新項(xiàng)目的搭建。

試想一下,如果沒有歷史負(fù)擔(dān),沒有KPI壓力,去新搭建一個(gè)項(xiàng)目,你會怎么設(shè)計(jì)和實(shí)現(xiàn)呢?

architecture

Application specific

類似clean architecture,分為三層 presentation - data - domain。

關(guān)于Clean Architecture由于國內(nèi)的一些文章和項(xiàng)目都多少有偏離和錯誤,建議直接看

兩篇文章。

domain為純領(lǐng)域模型,是Java library,包含了use case(Interactor)、DO、repository接口等domain package,目標(biāo)是在任何Java語言的平臺上都能直接使用,所以必須是平臺無關(guān),對平臺沒有任何依賴,能使用Java的方法(JUnit Mockito)來直接進(jìn)行測試。

data為domain的實(shí)現(xiàn),是Android library,從MVP的角度來說,即是M層,內(nèi)部隱藏所有數(shù)據(jù)細(xì)節(jié),cache、數(shù)據(jù)庫、網(wǎng)絡(luò)、PO、exception(根據(jù)業(yè)務(wù)特點(diǎn)自定義的exception)、repository的具體實(shí)現(xiàn)(內(nèi)部屏蔽數(shù)據(jù)細(xì)節(jié),可能來自網(wǎng)絡(luò)、數(shù)據(jù)庫、緩存等)。使用Robolectric 3 JUnit Mockito進(jìn)行集成測試。

presentation即展示層,是Android application module,對data不存在實(shí)際感知,依賴僅僅是Dagger注入的實(shí)例化,所有訪問都通過接口進(jìn)行,可見的是domain里的接口。包含了error message factory(所有exception都會被factory生成對應(yīng)的message)、DI、mapper(vo轉(zhuǎn)換)、VO(data binding進(jìn)行MVVM)、navigation、presenter(不強(qiáng)制,僅在一些特別復(fù)雜的場景引入)、usersystem、utils(業(yè)務(wù)相關(guān))、view(activity、fragment、adapter等)、application實(shí)現(xiàn)、業(yè)務(wù)常量等??梢允褂肊spresso和Android Instrumentation進(jìn)行UI測試。

整個(gè)項(xiàng)目類似MVP MVVM的混合(誰跟你說的MVP和MVVM是互斥的?),不過P層不一定存在,以避免為了模式而模式所導(dǎo)致的開發(fā)壓力。

Common libraries

aar依賴以避免對編譯速度造成影響,不過這里比較巧妙的是依賴作為module引入,所以當(dāng)需要源碼依賴的時(shí)候在build.gradle里進(jìn)行注釋/反注釋就能迅速切換,十分方便。

lib_uiframework: UI framework,包含了各種Base類,如BaseActivity、BaseFragment、Navigator(應(yīng)用中的一切通過scheme跳轉(zhuǎn))、ActivityManager、FragmentBackHelper等。

lib_uikit: 各種自定義view、第三方view的gradle或者源碼依賴。

lib_im: 即時(shí)通訊庫。

lib_component: 組件庫,如cache、gif、ClassLoaderInjecter、Log、SP、Web等。

lib_authorize: 第三方認(rèn)證(登陸),目前包括QQ、微信、微博、LinkedIn。

lib_share: 第三方分享,目前包括QQ、微信、微博。

…等等

Third party libraries

Dagger, jsr250: 依賴注入框架讓我們省了很多代碼,jsr250則是Dagger注入時(shí)的一個(gè)annotation根據(jù),我們的domain依賴了jsr250。

Rx大家族: RxJava, RxAndroid, RxBinding。新時(shí)代Android開發(fā)必備,還用說嗎?

Retrofit: 裝逼,喔,不對,高效率開發(fā)必備的網(wǎng)絡(luò)框架。使用注解生成API,方便極了。我這里的實(shí)踐是根據(jù)業(yè)務(wù)劃分多個(gè)API接口,然后通過Dagger module進(jìn)行實(shí)例化注入。

EventBus: 有了RxJava還要EventBus?當(dāng)然,事件并不總是一對一的。舉個(gè)簡單的例子,feed詳情信息更新后(比如點(diǎn)贊數(shù)據(jù)),外部可能有2個(gè)timeline頁面也需要更新這個(gè)數(shù)據(jù),這個(gè)時(shí)候EventBus就可以優(yōu)雅地進(jìn)行事件廣播。

Realm:一個(gè)不依賴于SqlLite的ORM庫,特點(diǎn)就是…快。還有同時(shí)有多個(gè)平臺的方案: ReactNative, OC, Swift, Java…

Google Support庫, data binding: Google家的,不用說了吧。

LeakCanary, BlockCanary: 開發(fā)階段必備工具,前者是square家檢測內(nèi)存泄露的,后者是我自己做的卡頓檢測工具。

Glide, Glide Transformation: 不折騰fresco,乖乖用Glide。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    激情五月天深爱丁香婷婷| 好吊日在线观看免费视频| 亚洲男人天堂网在线视频| 中文久久乱码一区二区| 99久久精品视频一区二区| 亚洲视频在线观看你懂的| 色综合视频一区二区观看| 日韩欧美一区二区亚洲| 日本不卡视频在线观看| 成人免费高清在线一区二区| 国产精品白丝久久av| 99久久精品免费看国产高清| 免费福利午夜在线观看| 91欧美一区二区三区| 在线观看国产成人av天堂野外| 大尺度剧情国产在线视频| 欧美人妻盗摄日韩偷拍| 麻豆视传媒短视频免费观看| 亚洲欧美日本视频一区二区| 色综合久久中文综合网| 亚洲精品伦理熟女国产一区二区| 日韩人妻欧美一区二区久久| 99久久精品久久免费| 五月婷婷综合激情啪啪| 国产精品午夜视频免费观看| 亚洲中文字幕日韩在线| 亚洲综合精品天堂夜夜| 成人亚洲国产精品一区不卡| 国产精品99一区二区三区| 成人国产激情在线视频| 国产极品粉嫩尤物一区二区 | 中文字幕精品人妻一区| 91福利视频日本免费看看 | 国产免费人成视频尤物| 国产级别精品一区二区视频| 日韩人妻有码一区二区| 91欧美日韩精品在线| 国产麻豆精品福利在线| 日韩国产欧美中文字幕| 亚洲日本加勒比在线播放| 好吊妞视频只有这里有精品|