Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
MVVM Pattern & TEST
PRISM LIVE STUDIO
발표자 소개
송유섭
( yoosub.song@navercor.com )
NAVER 8년차 Android 개발자
Android 개발 10년차
발표자 소개
2010년 갤럭시S 출시와 동시에
안드로이드 개발 시작.
Éclair[2.1], Froyo[2.2], GingerBread[2.3]
발표자 소개
Voice Action App - Seri 하지마 – Not Todo List
발표자 소개
발표자 소개
PRISM LIVE STUDIO..?
PRISM LIVE STUDIO?
PRISM LIVE STUDIO?
https://play.google.com/store/apps/details?id=com.prism.live
App Architecture Pattern
App Architecture Pattern?
MVC
MVP
MVVM
Model – View - Controller
Model – View - Presenter
Model – View - ViewModel
App Architecture Pattern?
View
Controlle
r
public class View {} public class Controller {
public View view;
}
View
Control...
App Architecture Pattern?
MVC MVP
Model – View - Controller Model – View - Presenter
View
Model
Controlle
r
View
Model
Pre...
App Architecture Pattern?
MVP MVVM
Model – View - Presenter Model – View - ViewModel
View
Model
Presenter
View
Model
ViewM...
App Architecture Pattern?
MVVM
View
Model
ViewModel
ViewModel은 View를 모른다.
= 모르게 해야만 한다.
App Architecture Pattern?
MVVM
View
Model
ViewModel
DataBinding
https://tv.naver.com/v/4637200
MVVM – ViewModel?
MVVM
ViewModel
AAC
(Android Architecture Component)
ViewModel
MVVM
MVVM
View ViewModel
LogicUI
Interaction
Click
Touch
Long Click
Drag&Drop
Seeking
…
OnPropertyChanged
DataBinding
Mode...
MVVM
MVVM
View ViewModel
디자이너 개발자
사실상 실패…
MVVM
MVVM
View ViewModel
Screen
Data/Logic
DataBinding
MVVM
MVVM
View ViewModel
Screen
Data/Logic
**Binding.java
PRISM의 MVVM..?
PRISM의 화면들
Single Activity
PRISM 개발에서의 이슈
보통의 개발 상황
1 화면 = 1 개발자
PRISM의 개발 상황
1 화면 = N 개발자
PRISM 개발에서의 이슈
하나의 Activity
수많은 View들 (Visibility 관리)
개발자들 사이의 분할(분담)
기능들의 확장성
변경의 용이성
PRISM의 화면들
<include> <ViewStub>
PRISM - <include>, <ViewStub>
view_layout_1.xml
view_layout_2.xml
view_layout_3.xml
PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
view_live_ma...
PRISM - <include>, <ViewStub>
MVVM
View ViewModel
Screen
Data/Logic
**Binding.java
1 : 1
or
1: N
PRISM - <include>, <ViewStub>
MVVM
View ViewModel
Screen
Data/Logic
**Binding.java
1 : 1
PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
LiveMainViewModel
TitleViewModel
InputFieldViewModel...
PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
(설명의 편의를 위해…...
PRISM – Visibility 관리
Title
Cancel
Menu
Input Field
Title
Cancel
Menu
Input Field가 Gone 되었다.
Input Field가 Hide 되었다.
Input ...
PRISM - Visibility 관리
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
PRISM - Visibility 관리
Live Main
Title
Input Field
Menu
Cancel
Parent
Child
Child
Child
Child
Child의 Enable은 Parent가 결정
= C...
PRISM - Visibility 관리
Live Main
Title
Input Field
Menu
Cancel
View1
View2
View3
View10
View11
View20
View21
View1-1
View1-...
PRISM - Visibility 관리
Live Main
Title
Input Field
Menu
Cancel
View1
View2
View3
View10
View11
View20
View21
View1-1
View1-...
PRISM - 업무분담
Live Main
Title
Input Field
Menu
Cancel
View1
View2
View3
View10
View11
View20
View21
View1-1
View1-2
View3-1...
PRISM – 이벤트 전달
Live Main
Title
Input Field
Menu
Cancel
View1
View2
View3
View10
View11
View20
View21
View1-1
View1-2
View3...
PRISM – 이벤트 전달
public class View1_ViewModel {
public static final int MESSAGE_ONCLICK_BUTTON = 1;
public void onClick() {
...
PRISM – 이벤트 전달
Live Main
Title
Input Field
Menu
Cancel
View1
View2
View3
View10
View11
View20
View21
View1-1
View1-2
View3...
PRISM의 Architecture
View – ViewModel은 1:1 관계
View의 Visibility = ViewModel의 enabled
ViewModel의 enabled는 Parent ViewModel에서만...
MVVM의 Testing
Testing
꼭 해야하나..?
왜 해야하지..?
어떤 것을 테스트 해야하지..?
Testing
꼭 해야하나..?
왜 해야하지..?
어떤 것을 테스트 해야하지..?
답을 찾기 위해 먼저 해보기로…
(꼭 MVVM에 관련된 이야기만은 아닙니다..)
Testing
A 상태에서
B 기능을 수행했을 때
C 상태가 되는가?
Testing
View – ViewModel은 1:1관계
DataBinding으로 자동 연결
ViewModel만 Test하면 끝
(ViewModel만 잘 되어있다면 View는 잘 그려진
다)
Testing
작은 기능단위로 묶임
큰 기능을 작은 기능 단위로 잘게 나눔
Testing
androidTest
test
단말에서 직접 테스트
PC상에서 테스트
(Android 환경이 필요한 경우)
(Android 환경이 필요하지 않은 경우)
Context
Activity, Service, Br...
Testing
Context
LiveMainViewModel (Outer)
LiveMainViewModel (Inner)
Testing
Clean Architecture
Q & A
사전 질문 중...
사전 질문 중...
네이버 개발자들에게 필요한 능력은?
네이버에서 어떻게 안드로이드 개발을 하는지..?
안드로이드 트랜드는..?
현업 개발이란..?
Nächste SlideShare
Wird geladen in …5
×

[D2 CAMPUS] Tech meetup(주제 Android) - 네이버 PRISM앱에 MVVM 패턴과 Test를 적용하며 겪은 일들(송유섭)

459 Aufrufe

Veröffentlicht am

[D2 CAMPUS] Tech meetup(주제 Android) - 네이버 PRISM앱에 MVVM 패턴과 Test를 적용하며 겪은 일들(송유섭)

Veröffentlicht in: Ingenieurwesen
  • You have to choose carefully. ⇒ www.HelpWriting.net ⇐ offers a professional writing service. I highly recommend them. The papers are delivered on time and customers are their first priority. This is their website: ⇒ www.HelpWriting.net ⇐
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

[D2 CAMPUS] Tech meetup(주제 Android) - 네이버 PRISM앱에 MVVM 패턴과 Test를 적용하며 겪은 일들(송유섭)

  1. 1. MVVM Pattern & TEST PRISM LIVE STUDIO
  2. 2. 발표자 소개 송유섭 ( yoosub.song@navercor.com ) NAVER 8년차 Android 개발자 Android 개발 10년차
  3. 3. 발표자 소개 2010년 갤럭시S 출시와 동시에 안드로이드 개발 시작. Éclair[2.1], Froyo[2.2], GingerBread[2.3]
  4. 4. 발표자 소개 Voice Action App - Seri 하지마 – Not Todo List
  5. 5. 발표자 소개
  6. 6. 발표자 소개
  7. 7. PRISM LIVE STUDIO..?
  8. 8. PRISM LIVE STUDIO?
  9. 9. PRISM LIVE STUDIO? https://play.google.com/store/apps/details?id=com.prism.live
  10. 10. App Architecture Pattern
  11. 11. App Architecture Pattern? MVC MVP MVVM Model – View - Controller Model – View - Presenter Model – View - ViewModel
  12. 12. App Architecture Pattern? View Controlle r public class View {} public class Controller { public View view; } View Controlle r public class View { public Controller ctr; } public class Controller { public View view; }
  13. 13. App Architecture Pattern? MVC MVP Model – View - Controller Model – View - Presenter View Model Controlle r View Model Presenter
  14. 14. App Architecture Pattern? MVP MVVM Model – View - Presenter Model – View - ViewModel View Model Presenter View Model ViewModel DataBinding
  15. 15. App Architecture Pattern? MVVM View Model ViewModel ViewModel은 View를 모른다. = 모르게 해야만 한다.
  16. 16. App Architecture Pattern? MVVM View Model ViewModel DataBinding https://tv.naver.com/v/4637200
  17. 17. MVVM – ViewModel? MVVM ViewModel AAC (Android Architecture Component) ViewModel
  18. 18. MVVM MVVM View ViewModel LogicUI Interaction Click Touch Long Click Drag&Drop Seeking … OnPropertyChanged DataBinding Model DB Network File Memory … ViewModel은 View를 모른다.
  19. 19. MVVM MVVM View ViewModel 디자이너 개발자 사실상 실패…
  20. 20. MVVM MVVM View ViewModel Screen Data/Logic DataBinding
  21. 21. MVVM MVVM View ViewModel Screen Data/Logic **Binding.java
  22. 22. PRISM의 MVVM..?
  23. 23. PRISM의 화면들 Single Activity
  24. 24. PRISM 개발에서의 이슈 보통의 개발 상황 1 화면 = 1 개발자 PRISM의 개발 상황 1 화면 = N 개발자
  25. 25. PRISM 개발에서의 이슈 하나의 Activity 수많은 View들 (Visibility 관리) 개발자들 사이의 분할(분담) 기능들의 확장성 변경의 용이성
  26. 26. PRISM의 화면들 <include> <ViewStub>
  27. 27. PRISM - <include>, <ViewStub> view_layout_1.xml view_layout_2.xml view_layout_3.xml
  28. 28. PRISM - <include>, <ViewStub> Live Main Title Cancel Menu Input Field
  29. 29. PRISM - <include>, <ViewStub> Live Main Title Cancel Menu Input Field Live Main Title Input Field Menu Cancel view_live_main.xml view_title.xml view_input_field.xml view_menu.xml view_cancel.xml <include>
  30. 30. PRISM - <include>, <ViewStub> MVVM View ViewModel Screen Data/Logic **Binding.java 1 : 1 or 1: N
  31. 31. PRISM - <include>, <ViewStub> MVVM View ViewModel Screen Data/Logic **Binding.java 1 : 1
  32. 32. PRISM - <include>, <ViewStub> Live Main Title Cancel Menu Input Field Live Main Title Input Field Menu Cancel
  33. 33. PRISM - <include>, <ViewStub> Live Main Title Cancel Menu Input Field LiveMainViewModel TitleViewModel InputFieldViewModel MenuViewModel CancelViewModel
  34. 34. PRISM - <include>, <ViewStub> Live Main Title Cancel Menu Input Field Live Main Title Input Field Menu Cancel (설명의 편의를 위해…) 이 뒤에서 보여지는 모든 Box는 ViewModel
  35. 35. PRISM – Visibility 관리 Title Cancel Menu Input Field Title Cancel Menu Input Field가 Gone 되었다. Input Field가 Hide 되었다. Input Field가 비활성화 되었다. => InputField.enabled = false
  36. 36. PRISM - Visibility 관리 Live Main Title Cancel Menu Input Field Live Main Title Input Field Menu Cancel
  37. 37. PRISM - Visibility 관리 Live Main Title Input Field Menu Cancel Parent Child Child Child Child Child의 Enable은 Parent가 결정 = Child의 Visibility는 Parent가 결정 그 외는 모두 독립모듈
  38. 38. PRISM - Visibility 관리 Live Main Title Input Field Menu Cancel View1 View2 View3 View10 View11 View20 View21 View1-1 View1-2 View3-1 View3-2 View3-3 View20-1 View20-2 View20-3
  39. 39. PRISM - Visibility 관리 Live Main Title Input Field Menu Cancel View1 View2 View3 View10 View11 View20 View21 View1-1 View1-2 View3-1 View3-2 View3-3 View20-1 View20-2 View20-3
  40. 40. PRISM - 업무분담 Live Main Title Input Field Menu Cancel View1 View2 View3 View10 View11 View20 View21 View1-1 View1-2 View3-1 View3-2 View3-3 View20-1 View20-2 View20-3
  41. 41. PRISM – 이벤트 전달 Live Main Title Input Field Menu Cancel View1 View2 View3 View10 View11 View20 View21 View1-1 View1-2 View3-1 View3-2 View3-3 View20-1 View20-2 View20-3
  42. 42. PRISM – 이벤트 전달 public class View1_ViewModel { public static final int MESSAGE_ONCLICK_BUTTON = 1; public void onClick() { sendMessage(MESSAGE_ONCLICK_BUTTON) } } public class View2_ViewModel { @Subscribe(MESSAGE_ONCLICK_BUTTON) public void onClickButton() { … } } Event 발생측 Event 수신측
  43. 43. PRISM – 이벤트 전달 Live Main Title Input Field Menu Cancel View1 View2 View3 View10 View11 View20 View21 View1-1 View1-2 View3-1 View3-2 View3-3 View20-1 View20-2 View20-3
  44. 44. PRISM의 Architecture View – ViewModel은 1:1 관계 View의 Visibility = ViewModel의 enabled ViewModel의 enabled는 Parent ViewModel에서만.. 그 외에는 ViewModel 각각이 모두 독립적 (Dependency 없음)
  45. 45. MVVM의 Testing
  46. 46. Testing 꼭 해야하나..? 왜 해야하지..? 어떤 것을 테스트 해야하지..?
  47. 47. Testing 꼭 해야하나..? 왜 해야하지..? 어떤 것을 테스트 해야하지..? 답을 찾기 위해 먼저 해보기로… (꼭 MVVM에 관련된 이야기만은 아닙니다..)
  48. 48. Testing A 상태에서 B 기능을 수행했을 때 C 상태가 되는가?
  49. 49. Testing View – ViewModel은 1:1관계 DataBinding으로 자동 연결 ViewModel만 Test하면 끝 (ViewModel만 잘 되어있다면 View는 잘 그려진 다)
  50. 50. Testing 작은 기능단위로 묶임 큰 기능을 작은 기능 단위로 잘게 나눔
  51. 51. Testing androidTest test 단말에서 직접 테스트 PC상에서 테스트 (Android 환경이 필요한 경우) (Android 환경이 필요하지 않은 경우) Context Activity, Service, BroadcastReceiver, ContentProvider
  52. 52. Testing Context LiveMainViewModel (Outer) LiveMainViewModel (Inner)
  53. 53. Testing Clean Architecture
  54. 54. Q & A
  55. 55. 사전 질문 중...
  56. 56. 사전 질문 중... 네이버 개발자들에게 필요한 능력은? 네이버에서 어떻게 안드로이드 개발을 하는지..? 안드로이드 트랜드는..? 현업 개발이란..?

×