MVP In PracticeMVP, OOP and Unit test
About meAndroid developer 2 years+
Name: 洪彥彬
Gitbook: https://www.gitbook.com/book/hungyanbin/android-unit-test/
Github: https://github.com/hungyanbin
Survey1. 沒聽過MVP2. 有聽過MVP3. 有寫過MVP,但是沒在實際專案用過
4. 有在實際專案部分實行MVP5. 有在實際專案部分實行MVP,並撰寫單元測試
TA1. 沒聽過MVP2. 有聽過MVP3. 有寫過MVP,但是沒在實際專案用過
4. 有在實際專案部分實行MVP5. 有在實際專案部分實行MVP,並撰寫單元測試
Won’t mention...1. Concept of MVP2. Difference between MVP, MVVM and MVC
I hope you know...1. Unit Test2. MVP 3. Object-oriented programming
Contract1. 在實作前就先要定義好 → DIP2. 定義 View 跟 Presenter 職責
3. Contract 應該要看不到 Android framework 的元件(Bundle, Context)4. 有關 Android Framework UI 元件,都在 View 實作中解決
5. 有關 Android Framework 非 UI 元件,都在 Model 實作中解決
Sample : Login PageSpec :
1. 可以輸入帳號
2. 可以輸入密碼
3. 點擊登入按鈕後,如果帳密正確,顯示登入成功
4. 點擊登入按鈕後,如果帳密錯誤,顯示登入失敗
Let’s make it harderShow error message
Before release...新需求:使用者登入失敗時告訴他輸入了什麼帳號
Bad smell1. 透露實作細節
2. 違反DIP(Dependency Inversion Principle)3. 依然沒有與 Android Framework(StringRes) 分開,而且使用integer來代表字串
不太合理4. 滿滿的技術債
Create a proxycontext.getString()
resourceService.getString()
What’s the difference??1. 將context 的職責分出來,職責更清楚了
2. 可讀性比較高
3. Presenter 與 Android Framework 完全沒關係了
可能會遇到的實務困難
1. Presenter 與 Model 的職責不好決定
2. Presenter : View 是一對一?多對一?多對多?
3. 與 Android Framework 切不乾淨
4. 不會寫單元測試