国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

最實用的Android架構設計原則

移動開發 Android
照這么一說,軟件是隨著時間發展和改變的,是架構上的發展和改變。實際上,好的軟件設計必須能夠幫助我們發展和擴充解決方案,保持其健壯性,而不 必每件事都重寫代碼(雖然在某些情況下重寫的方法更好,但是那是另一篇文章的話題,所以相信我,讓我們聚焦在前面所討論的話題上)。

開始之前,假設你已經閱讀過我之前撰寫的文章“ Architecting Android…The clean way ?”。如果還沒有閱讀過,為了更好地理解這篇文章,應借此機會讀一讀:


架構演變

演變意味著一個循序漸進的過程,由某些狀態改變到另一種不同的狀態,且新狀態通常更好或更復雜。

照這么一說,軟件是隨著時間發展和改變的,是架構上的發展和改變。實際上,好的軟件設計必須能夠幫助我們發展和擴充解決方案,保持其健壯性,而不 必每件事都重寫代碼(雖然在某些情況下重寫的方法更好,但是那是另一篇文章的話題,所以相信我,讓我們聚焦在前面所討論的話題上)。

在這篇文章中,我將講解我認為是必需的和重要的要點,為了保持基本代碼條理清晰,要記住下面這張圖片,我們開始吧!


響應式方法:RxJava

因為已經 有很多這方面的文章 ,還有這方面 做得很好、令人景仰的人 ,所以我不打算在這里討論RxJava的好處( 我假設您已經對它有所體驗了 )。但是,我將指出在Android應用程序開發方面的有趣之處,以及如何幫助我形成***個清晰的架構的方法。

首先,我選擇了一種響應式的模式通過轉換usecase(在這個清晰的架構命名規則中,其被稱為interactor)返回Observables<T>,表示所有底層都遵循這一鏈條,也返回Observables<T> 。

實戰解析Android架構設計原則

正如你所看到的,所有用例繼承這個抽象類,并實現抽象方法buildUseCaseObservable()。該方法將建立一個Observables<T>,它承擔了繁重的工作,還要返回所需的數據。

需要強調是,在execute()方法中,要確保Observables<T> 是在獨立線程執行,因此,要盡可能減輕阻止android主線程的程度。其結果就是會通過android主線程調度程序將主線程壓入線程隊列的尾部(push back)。

到目前為止,我們的Observables<T>啟動并且運行了。但是,正如你所知,必須要觀察它所發出的數據序列。要做到這一點, 我改進了presenters(MVP模式表現層的一部分),把它變成了觀察者(Subscribers),它通過用例對發出的項目做出“react”, 以便更新用戶界面。

觀察者是這樣的:

實戰解析Android架構設計原則

每個觀察者都是每個presenter的內部類,并實現了一個Defaultsubscriber<T>接口,創建了基本的默認錯誤處理。

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

 

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

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

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

從我的角度看有一點不足,甚至要為此需要付出代價,那些還不熟悉概念的開發人員還是要遵循學習曲線。但你從中得到了極有價值的東西。為了成功而reactive起來吧!
依賴注入:Dagger 2

關于依賴注入, 因為我已經寫了一篇完整的文章 ,我不想說太多。強烈建議你閱讀它,這樣我們就可以接著說下面的內容了。

值得一提的是,通過實現一個像Dagger 2那樣的依賴注入框架我們能夠獲得:

組件重用,因為依賴的對象可以在外部注入和配置。
當注入對象作為協作者(collaborators)時,由于對象的實例存在于在一個隔離和解耦地方,這樣在我們的代碼庫中,就不需要做很多的改變,就可以改變任何對象的實現。
依賴可以注入到一個組件:這些將這些模擬實現的依賴對象注入成為可能,這使得測試更容易。

Lambda表達式:Retrolambda

沒有人會抱怨在代碼中使用Java 8的lambada表達式,甚至在簡化并擺脫了很多樣板代碼以后,使用得更多,如你看到這段代碼:

 

實戰解析Android架構設計原則

然而,我百感交集,為什么呢?我們曾在 @SoundCloud 討論 Retrolambada ,主要是是否使用它,結果是:

1. 贊成的理由:

Lambda表達式和方法引用
“try-with-resources”語句
使用karma做開發

2. 反對的理由:

Java 8 API的意外使用
十分令人反感的第三方庫
要與Android一起使用的第三方插件Gradle

***,我們認定它不能為我們解決任何問題:你的代碼看起來很好且具有可讀性,但這不是我們與之共存的東西,由于現在所有功能***大的IDE都包含代碼折疊式選項,這就涵蓋這一需求了,至少是一個可接受的方式。

說實話,盡管我可能會在業余時間的項目中使用它,但在這里使用它的主要原因是嘗試和體驗Android中Lambda表達式。是否使用它由你自己決定。在這里我只是展示我的視野。當然,對于這樣一個了不起的工作,這個 庫 的作者值得我的稱贊。
測試方法

在測試方面,與示例的***個版本相關的部分變化不大:

表現層:用Espresso 2和Android Instrumentation測試框架測試UI。
領域層:JUnit + Mockito —— 它是Java的標準模塊。
數據層:將測試組合換成了Robolectric 3 + JUnit + Mockito。這一層的測試曾經存在于單獨的Android模塊。由于當時(當前示例程序的***個版本)沒有內置單元測試的支持,也沒有建立像 robolectric那樣的框架,該框架比較復雜,需要一群黑客的幫忙才能讓其正常工作。

幸運的是,這都是過去的一部分,而現在所有都是即刻可用,這樣我可以把它們重新放到數據模塊內,專門為其默認的測試路徑:src/test/java。
包的組織

我認為一個好的架構關鍵因素之一是代碼/包的組織:程序員瀏覽源代碼遇到的***件事情就是包結構。一切從它流出,一切依賴于它。

我們能夠辨別出將應用程序封裝進入包(package)的2個路徑:

按層分包:每一個包(package)中包含的項通常不是彼此密切相關的。這樣包的內聚性低、模塊化程度低,包之間偶合度高。因此,編輯某個特性要編輯來自不同包的文件。另外,單次操作幾乎不可能刪除掉某個功能特性。
按特性分包:用包來體現特性集。把所有相關某一特性(且僅特性相關)的項放入一個包中。這樣包的內聚性高,模塊化程度高,包之間偶合度低。緊密相關的項放在一起。它們沒有分散到整個應用程序中。

我的建議是去掉按特性分包,會帶來的好處有以下主要幾點:

模塊化程度更高
代碼導航更容易
功能特性的作用域范圍最小化了

如果與功能特性團隊一起工作(就像我們在@SoundCloud的所作所為),也會是非常有趣的事情。代碼的所有權會更容易組織,也更容易被模塊化。在許多開發人員共用一個代碼庫的成長型組織當中,這是一種成功。

如你所見,我的方法看起來就像按層分包:這里我可能會犯錯(例如,在“users”下組織一切),但在這種情況下我會原諒自己,因為這是個以學習為目的的例子,而且我想顯示的是清晰架構方法的主要概念。領會其意,切勿盲目模仿:-)。
還需要做的事:組織構建邏輯

我們都知道,房子是從地基上建立起來的。軟件開發也是這樣,我想說的是,從我的角度來看,構建系統(及其組織)是軟件架構的重要部分。

在Android平臺上,我們采用Gradle,它事實上是一種與平臺無關的構建系統,功能非常強大。這里的想法是通過一些提示和技巧,讓你組織構建應用程序時能夠得到簡化。

在單獨的gradle構建文件中按功能對內容進行分組

 

 

因此,你可以用“apply from: ‘buildsystem/ci.gradle’”插入到任何Gradle建立的文件中進行配置。不要把所有都放置在一個build.gradle文件中,否則就是去創建一個怪物,這是教訓。

創建依賴關系圖

實戰解析Android架構設計原則

如果想在項目的不同模塊間重用相同的組件版本,這很好;否則就要在不同的模塊間使用不同的版本的組件依賴。另外一點,你是在同一個地方控制依賴關系,像組件版本發生沖突這樣的事情一眼就能看出來。
結語

到目前為止講了那么多,一句話,要記住沒有靈丹妙藥。但好的軟件架構會幫助代碼保持清晰和健壯,還可以保持代碼的可擴展性,易于維護。

我想指出一些事情。面對軟件存在的問題,要報以本應當解決的態度:

遵守SOLID原則
不要過度思考(不過度工程化)
務實

盡可能降低(Android)框架中模塊的依賴性
 

責任編輯:chenqingxiang 來源: 隨時隨地學Java
相關推薦

2021-05-07 15:27:23

架構設計架構開發

2023-07-09 15:24:05

架構設計思想AKF

2021-11-01 21:01:01

架構設計軟件

2013-09-02 17:46:41

MVC架構設計MVC架構設計

2023-05-12 07:52:13

架構設計設計原則

2024-08-16 14:01:00

2024-09-09 09:00:12

架構設計算法

2025-01-15 08:10:29

Java架構代碼

2024-09-19 08:46:46

SPIAPI接口

2023-07-17 15:09:08

SaaS架構平臺

2025-04-15 04:00:00

2013-09-02 17:53:41

MVC架構設計MEF

2022-12-30 08:16:34

2020-08-27 14:22:29

MySQL數據庫架構設計

2013-05-27 10:58:28

Tumblr架構設計雅虎收購

2023-05-12 08:06:46

Kubernetes多云架構

2009-05-05 10:24:48

應用架構設計原則

2018-10-26 16:17:01

云計算數據中心架構

2022-02-25 15:56:44

云計算架構基礎設施

2022-01-13 09:38:25

Android架構設計
點贊
收藏

51CTO技術棧公眾號

欧美激情一二三| 91精品国产乱码久久久竹菊| 国产乱码精品| 在线观看不卡av| 在线免费观看黄色片| 成年人国产精品| 国产成人精品日本亚洲11| 亚洲午夜免费| 亚洲电影免费观看高清完整版在线 | 狠狠操综合网| 中文字幕日韩av| 国产在线高潮| 亚洲福利一区二区| 国产精品99久久免费黑人人妻| 日韩国产欧美在线视频| 成人久久一区二区三区| 精品福利网址导航| 久久人体大胆视频| 成人免费福利| 日韩精品小视频| 国产淫片在线观看| 日本乱人伦一区| 四色成人av永久网址| 激情五月综合婷婷| 亚洲精品久久久久中文字幕二区| 高清毛片在线看| 欧美日韩国产精品专区| 91破解版在线看| 一区二区欧美国产| 激情se五月| 伊人色综合久久天天| 激情综合网五月激情 | 大胆av不用播放器在线播放| 中文字幕亚洲视频| 亚洲熟妇无码av在线播放| 麻豆国产精品777777在线| 精品网站在线看| 在线不卡亚洲| 国产一区免费在线| 免费看a在线观看| 色婷婷香蕉在线一区二区| 免费男女羞羞的视频网站主页在线观看 | www日韩大片| 鲁一鲁一鲁一鲁一澡| 国产成a人亚洲| 毛片av在线播放| 国产福利精品导航| 九色自拍视频在线观看| 波多野结衣一区二区三区| 丰满少妇久久久| 久久精品网站免费观看| 最新中文字幕免费视频| 国产精品久99| 国产在线导航| 一本一本久久a久久精品综合麻豆| 亚洲大胆精品| 色视频成人在线观看免| 成人在线播放免费观看| 精品乱码亚洲一区二区不卡| 涩涩视频在线| 中文字幕av一区| 国内精品偷拍| 亚洲一区制服诱惑| 日本不卡一区二区三区| 久久久久久久久久久99| 成人欧美一区二区三区在线播放| 超碰影院在线| 91麻豆精品久久久久蜜臀| yellow字幕网在线| 欧美成人精品不卡视频在线观看| 国产精品chinese在线观看| 国产精品情侣自拍| 久久久噜噜噜久久狠狠50岁| 国产成人一区二区三区别| 欧美精彩视频一区二区三区| 亚洲国产精华液| 精品国产凹凸成av人导航| 亚洲黑人在线| 91香蕉国产在线观看| 老司机免费视频一区二区三区| 妞干网在线观看视频| 亚洲视频中文字幕| 国产精品久久麻豆| 久久婷婷国产麻豆91天堂| 深夜福利久久| 日本中文不卡| www.欧美色图| 在线看片免费人成视久网| 亚洲第一区第二区| 日韩福利视频一区| 色之综合天天综合色天天棕色 | 亚洲先锋成人| gogogo免费高清日本写真| 国产精品久久久久久久久搜平片| 国产人成在线视频| 中文字幕在线日韩 | 日韩高清一区| 国产不卡一区二区三区在线观看 | 欧美综合一区第一页| 亚洲三级免费| 香港三级韩国三级日本三级| 一区二区日韩欧美| 天天操天天干天天玩| 一区二区三区中文字幕电影| 日本乱理伦在线| 欧洲中文字幕国产精品| 国产农村妇女精品一二区| 50路60路老熟妇啪啪| 91精品国产欧美一区二区| 美女一区二区在线观看| 椎名由奈jux491在线播放 | 美女无遮挡网站| 日韩精品资源二区在线| 成人h动漫免费观看网站| 精品不卡在线| 一区精品在线播放| 欧美aaa视频| 欧美福利精品| 亚洲最大色网站| 91国产精品| 亚洲看片网站| 精品成人国产在线观看男人呻吟| 99久久久国产| 性欧美精品一区二区三区在线播放 | 亚洲精品国产成人影院| 国产在线无码精品| 色婷婷激情综合| 91蜜桃臀久久一区二区| 先锋影音网一区| 色婷婷香蕉在线一区二区| 精品少妇3p| 久青草视频在线播放| 日韩一卡二卡三卡国产欧美| 日韩成人精品一区二区| 国产裸体舞一区二区三区| 亚洲国产精品久久久久秋霞不卡| 国产在线电影| 欧美乱大交xxxxx另类电影| 久久国产夜色精品鲁鲁99| 国产在线精品一区二区三区| 国产精品欧美极品| 日韩福利影视| 草草草视频在线观看| 91麻豆精品91久久久久同性| 欧美好骚综合网| 日本全棵写真视频在线观看| 欧美激情一级二级| 久久精品综合网| 成人噜噜噜噜| 欧美丰满熟妇bbbbbb百度| 在线观看日韩www视频免费| 加勒比av一区二区| 国内激情视频在线观看| 欧美一区二区三区四区夜夜大片| 一本到高清视频免费精品| 欧美日一区二区| 写真片福利在线播放| 日韩av大片在线| 亚洲精品菠萝久久久久久久| 亚洲精品国模| 中文字幕日产av一二三区| 国产精品欧美日韩久久| 亚洲国产日韩a在线播放| 不卡中文字幕| 日本五码在线| 国产一区国产精品| 日韩欧美高清在线| 精品一区二区三区免费播放| 交100部在线观看| 国产精品视频网站在线观看 | 欧美影视一区二区三区| 欧美+亚洲+精品+三区| 国产黄色免费在线观看| 国产一级特黄a大片99| 91麻豆精品国产91久久久久 | 高清欧美一区二区三区| 中文文精品字幕一区二区| 啪啪亚洲精品| 日韩av免费观影| 国内成+人亚洲| 亚洲成年人在线播放| 国产在线视频一区二区| 日韩久久一区二区三区| 欧美两根一起进3p做受视频| 日本免费久久高清视频| 亚洲成人你懂的| 亚洲欧美久久久| 欧美va视频| 成人福利视频在| 国产精品香蕉视屏| 日韩成人小视频| 久久久久久久综合色一本| 日韩欧美天堂| 日本中文字幕在线2020| 在线视频91| 高清欧美一区二区三区| 欧美色视频日本高清在线观看| 日日摸夜夜添夜夜添国产精品| 色综合视频一区二区三区日韩| 久草电影在线|