Android Weekly Issue #240
January 15th, 2017
Android Weekly Issue #240
Hello, 各位親, 從本篇筆記開始, 以后并不包含Android Weekly的每一篇文章了, 只是選一些我感興趣的做筆記. 想要看全部文章的還請點擊上面的鏈接.
本期內容包括: 一個Android的RxJava教程; 關于測試中的注釋討論; Dagger2的實現細節討論; Kotlin語言設計中和Effective Java相關的點和優化; Reactive app的構建模式, 一個好的model層的重要性; 怎樣寫數據庫測試.
ARTICLES & TUTORIALS
RxAndroid Tutorial
一個RxAndroid的Tutorial, 內容包括:
- Reactive Programming是什么. -> 把reactive programming比喻成excel里面的表達式.
- observable是什么.
- 如何把按鈕點擊和輸入文字改變事件事件變為observables.
- 轉換.
- 過濾.
- 指定線程.
- 把多個observables聯合成一個.
Clean tests, Part 2: Comments
上一篇文章里作者討論了測試代碼的命名, 這篇討論注釋.
在測試里我們經常會見到這樣的注釋:
- // GIVEN
- // WHEN
- // THEN
注意每一次添加注釋的時候都應該想清楚自己的代碼是不是能夠自解釋, 而不是依賴于注釋. 這條原則同樣適用于產品代碼和測試代碼.
為每一個測試重復這三行其實沒有什么意義, 因為這個順序是顯而易見的.
理想情況下, 簡單的測試并不需要這些注釋就顯得很好看了, 如果是復雜的測試, 一般執行應該是一行, 驗證也應該是一行, 如果需要太多驗證我們應該考慮把它們抽取成多個測試方法. 而關于準備階段, 如果我們真的需要很多準備的代碼, 這是一種code smell, 可能說明我們要測試的這個方法做了太多事情, 可能我們應該先重構一下再進行測試.
我們也應該好好利用setUp()
方法, 讓我們的測試看起來更干凈.
最后建議用一些比較好的assert庫讓最后的斷言語句看起來更易懂.
Android Dagger2: Critical things to know before you implement
關于Dagger2的實現, 你應該搞清楚的幾個關鍵點.
- 實現單例的時候, 如果提供了@Provides方法, 那么@Singleton也要在這個provides方法上聲明, 聲明在類上是沒有用的. (類的單例聲明只和構造@Inject配合使用).
- 在component中提供了get方法后, 如果這個get方法沒有被調用, 則對象不會被實例化.
- Scope可以定義在該scope下的單例.
How “Effective Java” may have influenced the design of Kotlin
Kotlin的設計中考慮到的和Effective Java相關的幾個點:
- Kotlin的構造默認參數值進一步簡化了Builder模式.
- 更容易創建單例: 用object聲明.
- 用了data聲明后, 再也不用自己寫
equals()
和hashCode()
了. - properties自帶了默認的get/set, 使用更加簡潔, 也支持后續擴展.
- Kotlin中的override關鍵字是強制的而不是可選的.
Reactive apps with Model-View-Intent - Part 1
作者用RxJava + Model-View-Intent (MVI)構建的Reactive App, 也即UI響應狀態變化的App.
首先作者列舉了Android流行的模式MVC, MVP, MVVM, 這里面都會有一個Model. 但是作者發現大多數時候程序并沒有Model這一層.
構建一個好的Model層可以解決很多問題:
- 狀態.
- 屏幕方向旋轉.
- 后退導航.
- 進程死亡.
- 不可變和單向的數據流.
- 可調試和重復的狀態.
- 可測試性.
最基本的理念就是把這個Model層作為唯一的真實狀態來源.
Testing SQLite on Android – Medium
如何寫SQLite數據庫測試.
LIBRARIES & CODE
Desertplaceholder
一個沙漠空白頁面.
Android-SwitchIcon
Google launcher風格的Switch icon, enable時點亮, disable時灰去.
SlidesCodeHighlighter
一個web應用, 讓你可以把帶有高亮的代碼拷貝進slides.
GithubWidget
一個Github Widget, 顯示Contributions, stars, followers, trending etc.