簡單的 Android Clean Architecture 實現

CarsonWwv 8年前發布 | 32K 次閱讀 安卓開發 Android開發 移動開發

特性

簡單的實現了一下Android-Clean-Architecture,使用到了一些比較優秀的庫

realm 目前最流弊的移動端db

rxjava 一切都是流,你懂得

butterknife 視圖注入框架

glide 圖片加載框架

retrofit 網絡請求框架,可以與rxjava搭配

原理

最近 Android-CleanArchitecture 鬧得是沸沸揚揚,然而筆者也不甘寂寞,一直在研究這個東西,看過,不少的實現。

比如 android10 大神的實現 https://github.com/android10/Android-CleanArchitecture 比如 googlesample 的實現 https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/ 比如 dmilicic 大神的實現 https://github.com/dmilicic/Android-Clean-Boilerplate

Boilerplate 其實就是 模板的意思了,相信大家也看過不少這個詞了。

然而,架構方面的文章也很多,但是,究其源頭,無非都是出自uncle-bob 叔叔的這篇 https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html。 至于大家為什么大談特談,那一定是有他的道理的。就好比,用了CleanArchitecture,你會得到以下好處。

代碼復用性更高 更易于測試 耦合度更小

下面這幅圖,是googlesample下面的了。

下面這幅圖,是uncle-bob畫的了。

細心的你已經發現了,這兩個圖其實是一個意思。從大的方向上看,都是三層結構。

DataLayer

最底層,完全不知道有 DomainLayer , PresentationLayer 的存在,聽到這里,你還在懷疑這個架構的 可測試性 和 耦合度低 嗎?那么 DataLayer 的主要職責是什么? 1、從網絡獲取數據,向網絡提交數據,總之就是和網絡打交道。 2、從本地DB,shareprefence等等,內存等,總之就是本地獲取數據,緩存數據,總之就是和本地數據打交道的。 這也就是你為什么看到很多Android-CleanArchitecture 的 package里面有一個local ,和一個remote了,然而是否有必要分的這么細,個人習慣啊~,不強求。反正這一層如果出現了 anroid.os***,我就更你拼了,對不起,你已經偏離了Android-CleanArchitecture了。

DomainLayer

中間層,他完全不知道有一個 PresentationLayer 存在,他只知道,有DataLayer,他可以基于這些數據,建立很多玩法,比如去網絡拿一堆名人回來,然后將這些數據緩存到本地,在比如,他寫了一篇黑某明星的文章,將文字發布到網上等等。因此他的主要職責是: 1、控制 DataLayer 對數據做 增刪改查 ,沒錯,就這么簡單,然后就沒有然后了。 2、真的沒有了,不騙你,但是這一層如果出現了 anroid.os***,我就更你拼了,對不起,你已經偏離了Android-CleanArchitecture了。

PresentationLayer

最上層,他知道 DomainLayer ,有人要問了,那么他知道 DataLayer ,回答,他知道你妹~ 他累不累啊,要知道這么多? 因此,它只知道 DomainLayer ,那么他的職責有哪些? 1、通知 DomainLayer 有活干了,根據 DomainLayer 反饋變化界面 2、通知 DomainLayer 有活干了,根據 DomainLayer 反饋變化界面 3、通知 DomainLayer 有活干了,根據 DomainLayer 反饋變化界面 這年頭,重要的時間一定要說三遍,而且,就是這么任性~~

分析了每層之后,我們發現,依賴的關系是 PresentationLayer --> DomainLayer --> DataLayer 的。 DomainLayer --> DataLayer 不知道有android平臺的存在。 因此,只要我們圍繞這個原則去做架構,那么就稱的上是Android-CleanArchitecture。

todo

dagger2依賴注入,隨便比較難理解吧,但是用上之后,顯然要大幅降低耦合。

 

 本文由用戶 CarsonWwv 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!