最近 Android-CleanArchitecture 鬧得是沸沸揚揚砍的,然而筆者也不甘寂寞,一直在研究這個東西汽纠,也fork過一些關(guān)于cleanArchitecture開源的項目進行了學(xué)習(xí):
比如 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
關(guān)于探討CleanArchitecture架構(gòu)方面的文章也很多,但是潜慎,究其源頭帜乞,無非都是出自uncle-bob 叔叔的這篇 https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
至于大家為什么傾向于cleanArchitecture司抱,那一定是有他的道理的。就好比挖函,對比傳統(tǒng)開發(fā)的MVC開發(fā)方式状植,你會得到以下好處。
代碼復(fù)用性更高
更易于測試
耦合度更小
下面這幅圖怨喘,是googlesample下面的了津畸。
下面這幅圖,是uncle-bob畫的了必怜。
細心的你已經(jīng)發(fā)現(xiàn)了肉拓,這兩個圖其實是一個意思。從大的方向上看梳庆,都是三層結(jié)構(gòu)暖途。
DataLayer
最底層,完全不知道有DomainLayer
膏执,PresentationLayer
的存在驻售,聽到這里,你還在懷疑這個架構(gòu)的可測試性
和耦合度低
嗎更米?那么DataLayer
的主要職責(zé)是什么欺栗?
1、從網(wǎng)絡(luò)獲取數(shù)據(jù)征峦,向網(wǎng)絡(luò)提交數(shù)據(jù)迟几,總之就是和網(wǎng)絡(luò)打交道。
2栏笆、從本地DB类腮,shareprefence等等,內(nèi)存等蛉加,總之就是本地獲取數(shù)據(jù)蚜枢,緩存數(shù)據(jù),總之就是和本地數(shù)據(jù)打交道的针饥。
這也就是你為什么看到很多Android-CleanArchitecture 的 package里面有一個local ,和一個remote了祟偷,然而是否有必要分的這么細,個人習(xí)慣啊~打厘,不強求。反正這一層如果出現(xiàn)了 anroid.os***,我就更你拼了贺辰,對不起户盯,你已經(jīng)偏離了Android-CleanArchitecture了嵌施。
DomainLayer
中間層,他完全不知道有一個PresentationLayer
存在莽鸭,他只知道吗伤,有DataLayer,他可以基于這些數(shù)據(jù)硫眨,建立很多玩法足淆,比如去網(wǎng)絡(luò)拿一堆名人回來,然后將這些數(shù)據(jù)緩存到本地礁阁,在比如巧号,他寫了一篇黑某明星的文章,將文字發(fā)布到網(wǎng)上等等姥闭。因此他的主要職責(zé)是:
1丹鸿、控制DataLayer
對數(shù)據(jù)做增刪改查,沒錯棚品,就這么簡單靠欢,然后就沒有然后了。
2铜跑、真的沒有了门怪,不騙你,但是這一層如果出現(xiàn)了 anroid.os***,我就更你拼了锅纺,對不起掷空,你已經(jīng)偏離了Android-CleanArchitecture了。
PresentationLayer
最上層伞广,他知道DomainLayer
拣帽,有人要問了,那么他知道DataLayer
嚼锄,回答减拭,他知道你妹~ 他累不累啊,要知道這么多区丑?
因此拧粪,它只知道DomainLayer
,那么他的職責(zé)有哪些沧侥?
1可霎、通知DomainLayer
有活干了,根據(jù)DomainLayer
反饋變化界面
2宴杀、通知DomainLayer
有活干了癣朗,根據(jù)DomainLayer
反饋變化界面
3、通知DomainLayer
有活干了旺罢,根據(jù)DomainLayer
反饋變化界面
這年頭旷余,重要的時間一定要說三遍绢记,而且,就是這么任性~~
分析了每層之后正卧,我們發(fā)現(xiàn)蠢熄,依賴的關(guān)系是 PresentationLayer --> DomainLayer --> DataLayer 的。
DomainLayer --> DataLayer 不知道有android平臺的存在炉旷。
因此签孔,只要我們圍繞這個原則去做架構(gòu),那么就稱的上是Android-CleanArchitecture窘行。