Suggest a new pattern "How to divide your Activity & Fragment".
Shows "Lotto - App" sample.
Youtube: https://www.youtube.com/watch?v=_-yZPjf9HLo
Hope it would help to understand Andoird Architecture Pattern.
28. Presenter
View
Activity, Fragment
우리의 현실
•View 관련작업을 할때 presenter가 노출되어 있어
쉽게 비지니스 로직에 관여할 수 있음
•startActivityForResult, onActivityResult 등
화면 전환과 관련된 로직이 View에 들어감.
-> View와 관련 없는 코드와 섞이기 시작.
-> Activity, Fragment의 코드 읽기가 어려워짐
(https://github.com/googlesamples/android-architecture/tree/todo-mvp-kotlin)MVP의 불편
30. MVVM의 불편
유저 인터랙션의 (클릭, 스크롤, 스와이프)
처리 방식이 다양하다.
(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-live-kotlin)
2. Command Observer 필드 관찰
3. 별도의 리스너
1. ViewModel 직접 호출
31. MVVM의 불편
1. ViewModel 객체의 함수를 직접 호출 하는 방법
=> ViewModel의 역할은 Data 보관. 함수가 생기면 ViewModel이 무거워 질 수 있다
=> 해당 ViewModel Data 변화를 주는 메서드 외에는 직접 호출은 지양.
(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-live-kotlin)
33. MVVM의 불편
3. 별도의 리스너 구현
=> ViewModel이 아닌 객체로 액션을 전달 가능
=> 바인딩이 일어나는 Activity, Fragment에서 리스너 구현
(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-live-kotlin)
예제에서는 Listener를 통해
ViewModel 함수 호출.
=> 이럴꺼면 차라리 xml에서
viewModel을 직접 호출하는게
call 뎁스를 줄일 수 있다.
34. MVVM의 불편
인터랙션 처리의 방식이 다양하고,
한가지로 정하기가 애매하여
화면 스펙마다 사용 방식이 다름
(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-live-kotlin)
=> 코드 복잡을 유발
=> 팀에서 규칙을 정해야 좋음
37. SVC 패턴이 생긴 이유
- 껍데기 역할의 interface 파일 관리
- 비지니스 로직과 View 로직의 분리 안됨
- 사용자 인터랙션 처리의 애매함
- View 로직의 Debugging이 힘듦
- 제거
- 분리
- 단일 방법 제시
- Debugging 가능
어려움 해결
+α
- Activity, Fragment
중복 로직 제거
- 나눠진 컴포넌트 재사용
- View의 추상화 가능
41. SVC 설명
S
Screen
Activity, Fragment
- 화면의 특정 영역을 담당
- 이전 화면에서 넘어온 정보 세팅
(Intent, Bundle)
- 다음 화면 이동을 수행함.
(startActivity, fragment 이동)
- 다음 화면의 결과를 받아옴
(onActivityResult)
42. SVC 설명
Views
inflate된 xml 관리
- Screen이 보여주는 xml 관리
- 정보를 받아 화면에 Render
- 유저의 인터렉션을
ControlTower에 전달 (feat. ViewsAction)
- View들이 모여있는 큰 커스텀뷰
V
43. C
SVC 설명
ControlTower
로직을 담당하는 관제탑
- Screen의 LifeCycle 이벤트 처리
- Views에서 발생한 viewsAction 처리
- 그 외에 등록한 각종 센서의 이벤트 처리
- 네트워크 상태 변화 처리
67. SVC - 설계 Types
ViewModel 내부 필드가 여러 종류의
속성들을 들고 있다면, ControlTower가
여러 Model들을 통해서 중간 관리를
해주는 것이 복잡도를 낮출 수 있다.
68. SVC - 설계 Types
ViewModel 내부 필드가 한 종류의 데이터 집합을 관리한다면,
ViewModel이 직접 Model을 통해 데이터를 관리하는게
관계적 측면과, 유지 보수측면에서 낫다.
(ControlTower의 불필요한 중간 연계를 끊을 수 있다.)
69. SVC - 설계 Types
Screen들은
서로 정보를
주고 받으며
사용자에게 필요한
것을 제공한다.
114. 다른 패턴들과의 비교 항목
•Code 라인 수
•화면 전환 로직의 배치
•스펙 변경 대응 능력
•디버깅
•유닛 테스트
115. 다른 패턴들과의 비교 항목
•Code 라인 수
생산성을 정성적인 수치로 가장 간단하게 확인할 수 있는 방법.
같은 스펙을 놓고 코드 라인 숫자를 비교해보면.
실제로 프로그래머가 코드를 작성하는 양을 알 수 있고,
코드가 적을 수록 문제가 생긴 위치를 찾는 데 더 유리하다.