SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
MVP In Practice
MVP, OOP and Unit test
About me
Android developer 2 years+
Name: 洪彥彬
Gitbook:
https://www.gitbook.com/book/hungyanbin/android-un
it-test/
Github: https://github.com/hungyanbin
Forward
Survey
1. 沒聽過MVP
2. 有聽過MVP
3. 有寫過MVP,但是沒在實際專案用過
4. 有在實際專案部分實行MVP
5. 有在實際專案部分實行MVP,並撰寫單元測試
TA
1. 沒聽過MVP
2. 有聽過MVP
3. 有寫過MVP,但是沒在實際專案用過
4. 有在實際專案部分實行MVP
5. 有在實際專案部分實行MVP,並撰寫單元測試
Won’t mention...
1. Concept of MVP
2. Difference between MVP, MVVM and MVC
I hope you know...
1. Unit Test
2. MVP
3. Object-oriented programming
Step 1
Define Contract
Contract
1. 在實作前就先要定義好 → DIP
2. 定義 View 跟 Presenter 職責
3. Contract 應該要看不到 Android framework 的元件(Bundle, Context)
4. 有關 Android Framework UI 元件,都在 View 實作中解決
5. 有關 Android Framework 非 UI 元件,都在 Model 實作中解決
Sample : Login Page
Spec :
1. 可以輸入帳號
2. 可以輸入密碼
3. 點擊登入按鈕後,如果帳密正確,顯示登入成功
4. 點擊登入按鈕後,如果帳密錯誤,顯示登入失敗
Step 2
Implementation
Step 3
Unit test
Too easy?
Let’s make it
harder
Show error message
Any Problem?
Possible Solution:
Before release...
新需求:使用者登入失敗時告訴他輸入了什麼帳號
Bad smell
1. 透露實作細節
2. 違反DIP(Dependency Inversion Principle)
3. 依然沒有與 Android Framework(StringRes) 分開,而且使用integer來代表字串
不太合理
4. 滿滿的技術債
讓我們重新思考一下
Create a proxy
context.getString()
resourceService.getString()
Git diff
What’s the difference??
1. 將context 的職責分出來,職責更清楚了
2. 可讀性比較高
3. Presenter 與 Android Framework 完全沒關係了
ResourceServiceImp(1)
ApplicationImp(2)
Unit test(3)
Summary
可能會遇到的實務困難
1. Presenter 與 Model 的職責不好決定
2. Presenter : View 是一對一?多對一?多對多?
3. 與 Android Framework 切不乾淨
4. 不會寫單元測試
一點點小心得
1. 要不要“全部”用MVP自己決定
2. 使用單元測試會知道自己設計的缺陷

Weitere ähnliche Inhalte

Andere mochten auch

Android動態ui介面設計
Android動態ui介面設計Android動態ui介面設計
Android動態ui介面設計
艾鍗科技
 
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
Kobkrit Viriyayudhakorn
 

Andere mochten auch (20)

Android動態ui介面設計
Android動態ui介面設計Android動態ui介面設計
Android動態ui介面設計
 
React native sharing
React native sharingReact native sharing
React native sharing
 
Green dao 3.0
Green dao 3.0Green dao 3.0
Green dao 3.0
 
Android Effective UI: Tips, Tricks and Patterns
Android Effective UI: Tips, Tricks and PatternsAndroid Effective UI: Tips, Tricks and Patterns
Android Effective UI: Tips, Tricks and Patterns
 
Android Architecture MVP Pattern
Android Architecture MVP Pattern Android Architecture MVP Pattern
Android Architecture MVP Pattern
 
Tudo sobre listas no android
Tudo sobre listas no androidTudo sobre listas no android
Tudo sobre listas no android
 
What is FED
What is FEDWhat is FED
What is FED
 
Trend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding toolTrend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding tool
 
GreenDao Introduction
GreenDao IntroductionGreenDao Introduction
GreenDao Introduction
 
Green dao
Green daoGreen dao
Green dao
 
Skroutz Android MVP and Adapter Delegates presentation
Skroutz Android MVP and Adapter Delegates  presentationSkroutz Android MVP and Adapter Delegates  presentation
Skroutz Android MVP and Adapter Delegates presentation
 
React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharing
 
Infinum Android Talks #12 - MVP design pattern for Android Apps
Infinum Android Talks #12 - MVP design pattern for Android AppsInfinum Android Talks #12 - MVP design pattern for Android Apps
Infinum Android Talks #12 - MVP design pattern for Android Apps
 
React Native for Web
React Native for WebReact Native for Web
React Native for Web
 
React Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + AuthenticationReact Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + Authentication
 
RxJava 2.0 介紹
RxJava 2.0 介紹RxJava 2.0 介紹
RxJava 2.0 介紹
 
React-Native Lecture 11: In App Storage
React-Native Lecture 11: In App StorageReact-Native Lecture 11: In App Storage
React-Native Lecture 11: In App Storage
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
 
React Native: Developing an app similar to Uber in JavaScript
React Native: Developing an app similar to Uber in JavaScriptReact Native: Developing an app similar to Uber in JavaScript
React Native: Developing an app similar to Uber in JavaScript
 

Ähnlich wie Mvp in practice

Ähnlich wie Mvp in practice (17)

React-Native share
React-Native shareReact-Native share
React-Native share
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質twMVC#07 | 透過測試提升軟體品質
twMVC#07 | 透過測試提升軟體品質
 
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 Library
 
20111130 g24分享(i phone ux)_leona(public)
20111130 g24分享(i phone ux)_leona(public)20111130 g24分享(i phone ux)_leona(public)
20111130 g24分享(i phone ux)_leona(public)
 
银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011银弹!银弹! 徐毅@Italk salon 2011
银弹!银弹! 徐毅@Italk salon 2011
 
DevOps Days Taipei 2018
DevOps Days Taipei 2018DevOps Days Taipei 2018
DevOps Days Taipei 2018
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
PHP 单元测试
PHP 单元测试PHP 单元测试
PHP 单元测试
 
[VideOhya] Titanium開發經驗分享_1020
[VideOhya] Titanium開發經驗分享_1020[VideOhya] Titanium開發經驗分享_1020
[VideOhya] Titanium開發經驗分享_1020
 
Scrum过程介绍
Scrum过程介绍Scrum过程介绍
Scrum过程介绍
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
 

Mehr von 彥彬 洪 (11)

Rx java testing patterns
Rx java testing patternsRx java testing patterns
Rx java testing patterns
 
Rxjava2 custom operator
Rxjava2 custom operatorRxjava2 custom operator
Rxjava2 custom operator
 
Koin
KoinKoin
Koin
 
Android material theming
Android material themingAndroid material theming
Android material theming
 
Kotlin in practice
Kotlin in practiceKotlin in practice
Kotlin in practice
 
Jsr310
Jsr310Jsr310
Jsr310
 
ThreeTen
ThreeTenThreeTen
ThreeTen
 
科特林λ學
科特林λ學科特林λ學
科特林λ學
 
Android 6.0 permission change
Android 6.0 permission changeAndroid 6.0 permission change
Android 6.0 permission change
 
設定android 測試環境
設定android 測試環境設定android 測試環境
設定android 測試環境
 
Green dao
Green daoGreen dao
Green dao
 

Mvp in practice