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. App Architecture Pattern?
MVC MVP
Model – View - Controller Model – View - Presenter
View
Model
Controlle
r
View
Model
Presenter
14. App Architecture Pattern?
MVP MVVM
Model – View - Presenter Model – View - ViewModel
View
Model
Presenter
View
Model
ViewModel
DataBinding
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. PRISM - <include>, <ViewStub>
MVVM
View ViewModel
Screen
Data/Logic
**Binding.java
1 : 1
or
1: N
32. PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
33. PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
LiveMainViewModel
TitleViewModel
InputFieldViewModel
MenuViewModel
CancelViewModel
34. PRISM - <include>, <ViewStub>
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
(설명의 편의를 위해…)
이 뒤에서 보여지는 모든 Box는 ViewModel
35. PRISM – Visibility 관리
Title
Cancel
Menu
Input Field
Title
Cancel
Menu
Input Field가 Gone 되었다.
Input Field가 Hide 되었다.
Input Field가 비활성화 되었다.
=> InputField.enabled = false
36. PRISM - Visibility 관리
Live Main
Title
Cancel
Menu
Input Field
Live Main
Title
Input Field
Menu
Cancel
37. PRISM - Visibility 관리
Live Main
Title
Input Field
Menu
Cancel
Parent
Child
Child
Child
Child
Child의 Enable은 Parent가 결정
= Child의 Visibility는 Parent가 결정
그 외는 모두 독립모듈
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. 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. 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. 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. 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. 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. PRISM의 Architecture
View – ViewModel은 1:1 관계
View의 Visibility = ViewModel의 enabled
ViewModel의 enabled는 Parent ViewModel에서만..
그 외에는 ViewModel 각각이 모두 독립적 (Dependency 없음)