Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
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.
Presenter
View
Activity, Fragment
우리의 현실
•View관련작업을 할때 presenter가 노출되어 있어
쉽게 비지니스 로직에 관여할 수 있음
•startActivityForResult, onActivityResult 등
화면 전환과 관련된 로직이 View에 들어감.
-> View와 관련 없는 코드와 섞이기 시작.
-> Activity, Fragment의 코드 읽기가 어려워짐
(https://github.com/googlesamples/android-architecture/tree/todo-mvp-kotlin)MVP의 불편
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)
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)
=> 코드 복잡을 유발
=> 팀에서 규칙을 정해야 좋음
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 처리
- 그 외에 등록한 각종 센서의 이벤트 처리
- 네트워크 상태 변화 처리
다른 패턴들과의 비교항목
•Code 라인 수
•화면 전환 로직의 배치
•스펙 변경 대응 능력
•디버깅
•유닛 테스트
115.
다른 패턴들과의 비교항목
•Code 라인 수
생산성을 정성적인 수치로 가장 간단하게 확인할 수 있는 방법.
같은 스펙을 놓고 코드 라인 숫자를 비교해보면.
실제로 프로그래머가 코드를 작성하는 양을 알 수 있고,
코드가 적을 수록 문제가 생긴 위치를 찾는 데 더 유리하다.