響應(yīng)式方法:RxJava

2018-02-24 15:45 更新

響應(yīng)式方法:RxJava

因?yàn)橐呀?jīng)有很多這方面的文章,還有這方面做得很好、令人景仰的人,所以我不打算在這里討論RxJava的好處(我假設(shè)您已經(jīng)對(duì)它有所體驗(yàn)了)。但是,我將指出在Android應(yīng)用程序開發(fā)方面的有趣之處,以及如何幫助我形成第一個(gè)清晰的架構(gòu)的方法。

首先,我選擇了一種響應(yīng)式的模式通過轉(zhuǎn)換usecase(在這個(gè)清晰的架構(gòu)命名規(guī)則中,其被稱為interactor)返回Observables,表示所有底層都遵循這一鏈條,也返回Observables 。

?

正如你所看到的,所有用例繼承這個(gè)抽象類,并實(shí)現(xiàn)抽象方法buildUseCaseObservable()。該方法將建立一個(gè)Observables,它承擔(dān)了繁重的工作,還要返回所需的數(shù)據(jù)。

需要強(qiáng)調(diào)是,在execute()方法中,要確保Observables 是在獨(dú)立線程執(zhí)行,因此,要盡可能減輕阻止android主線程的程度。其結(jié)果就是會(huì)通過android主線程調(diào)度程序?qū)⒅骶€程壓入線程隊(duì)列的尾部(push back)。

到目前為止,我們的Observables啟動(dòng)并且運(yùn)行了。但是,正如你所知,必須要觀察它所發(fā)出的數(shù)據(jù)序列。要做到這一點(diǎn),我改進(jìn)了presenters(MVP模式表現(xiàn)層的一部分),把它變成了觀察者(Subscribers),它通過用例對(duì)發(fā)出的項(xiàng)目做出“react”,以便更新用戶界面。

觀察者是這樣的:

?

每個(gè)觀察者都是每個(gè)presenter的內(nèi)部類,并實(shí)現(xiàn)了一個(gè)Defaultsubscriber接口,創(chuàng)建了基本的默認(rèn)錯(cuò)誤處理。

將所有的片段放在一起后,通過下面的圖,你可以獲得完整的概念:

?

讓我們列舉一些擺脫基于RxJava方法的好處:

在觀察者(Subscribers)與被觀察者(Observables)之間去耦合:更加易于維護(hù)和測(cè)試。

  • 簡(jiǎn)化異步任務(wù):如果要求多個(gè)異步執(zhí)行時(shí),如果需要一個(gè)以上異步執(zhí)行的級(jí)別,Java的thread和future的操作和同步比較復(fù)雜,因此通過使用調(diào)度程序,我們可以很方便地(不需要額外工作)在后臺(tái)與主線程之間跳轉(zhuǎn),特別是當(dāng)我們需要更新UI時(shí)。還可以避免“回調(diào)的坑”—— 它使我們代碼可讀性差,且難以跟進(jìn)。
  • 數(shù)據(jù)轉(zhuǎn)換/組成:在不影響客戶端情況下,我們能夠整合多個(gè)Observables,使解決方案更靈活。
  • 錯(cuò)誤處理:在任何Observables內(nèi)發(fā)生錯(cuò)誤時(shí),就向消費(fèi)者發(fā)出信號(hào)。

從我的角度看有一點(diǎn)不足,甚至要為此需要付出代價(jià),那些還不熟悉概念的開發(fā)人員還是要遵循學(xué)習(xí)曲線。但你從中得到了極有價(jià)值的東西。為了成功而reactive起來吧!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)