- 플랫폼 서비스의 경우 고객용 앱 / 제휴 업체용 / 어드민 용 등 앱을 다양하게 만드는 경우가 많음
- 점진적으로 마이그레이션 진행이 기본
- 헤이딜러 앱에서 기술 선택 할 때, 기준이 Google이 공식 지원 / main 으로 흐름을 바꿀 때 보통 기술을 선택함
- 헤이딜러 앱
- Kotlin 100% 변환 완료
- Java → Kotlin 전환 할 때 각종 사이드이펙트가 많음
- MVVM 100% 변환 완료
- Koin → Hilt 변환 완료
- RxJava / LiveData를 더이상 쓰지 않음 모든것은 Coroutine
- RxJava → Promise 패턴 / Coroutine → Async, Await 패턴
- Livedata는 StateFlow로 대체해서 활용
- UI에서 발생하는 이벤트를 SingleLiveData로 많이 쓰는데, SharedFlow( EventFlow )로 활용하도록 변경
- 클린아키텍처
- 구글 / 엉클밥의 클린아키텍처가 형태가 다름
- Presentation layer는 domain layer를 알고 있다 ? ( Y / N )
- Domain Layer는 data layer를 알고 있다 ? ( Y / N )
- Data layer는 Domain layer을 알고 있다 ( Y / N )
- 구글 ( Ui → Domain → Data )
- 밥아저씨 ( Ui → Domain / Data → Domain )
- 구조
- Domain : UseCase, Repo
- Presetation : UI
- Data : RepoImpl, DataSource
- Remote : DataSourceImpl, Api
- Local : DataSourceImpl, DB, DAO
- Model 클래스는 모든 layer에 존재함
- 5개의 레이어라면 5개의 모델 클래스가 존재
- 장점 예시
- UI 개선 작업이 생기면, UseCase / ViewModel 등의 변경 없이 UI 영역만 변경
- 서버에서 우리가 생각하는 필드 이름 / 필드 구조를 주지 않아도 domain 모델 구조는 변경되지 않음
- 차량 정보를 불러 올 때, local에서 먼저 가져온 뒤 remote로 fetch해서 지연시간 없앰
- APi 구현이 되어 있지 않은 상황에서도 remote만 Mock해서 구현
- 테스트 코드 작성이 매우 용이함
- KMP로 대화합 가능 ?
- 헤이딜러 코딩 스타일은 github에서 참조 가능
- 앱에서 공통적인 작업이 이루어 지는 경우 라이브러리 모듈을 만들어 놓고 활용
- 브랜치 단위로 라이브러리 버전을 관리
- 최대한 모듈을 많이 만들어 멀티모듈 형태로 관리 하려고 함
- Feature 모듈 단위로까지는 나누지 않은 상태
- 디자인 카탈로그 화면을 만들어 디자이너한테 디자인 리뷰를 받음
- 닫기와 뒤로가기 뭐가 다른가 등을 고민많이해봄
- 애니메이션에 진심인편