[Andoird] 앱 아키텍처 - Domain Layer, Data Layer

Taewoo Kim·2022년 9월 20일
0

Domain Layer

Domain Layer는 UI Layer와 Data Layer사이의 있는 Optional Layer이다.

Domain Layer는 복잡한 비즈니스 로직이나 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당.

Domain Layer의 이점

  • 코드 중복을 방지
  • 도메인 레이어 클래스를 사용하는 클래스의 가독성을 개선
  • 앱의 테스트 가능성을 높임
  • 책임을 분할하여 대형 클래스를 피할 수 있음

이를 가볍게 유지하기 위해, 기능 하나만 담당하고 변경 가능한 데이터는 UI or Data Layer에서 처리해야함.

종속 항목

일반적인 앱 아키텍처에서 UseCase 클래스는 UI 레이어의 ViewModel과 데이터 레이어의 저장소 사이에 위치함.

UseCase 클래스는 일반적으로 Repositories 클래스에 종속되며, Repositories와 동일한 방법으로 코루틴을 사용하여 UI Layer와 통신.

다른 UseCase사용될 수 있다.

Data Layer

UI Layer에는 UI 관련 상태 및 UI 로직이 포함되지만 Data Layer에는 애플리케이션 데이터 및 비즈니스 로직이 포함됨.

비즈니스 로직은 앱에 가치를 부여하는 요소로, 애플리케이션의 데이터 생성, 저장, 변경 방식을 결정하는 실제 비즈니스 규칙으로 구성됨.

이렇게 관심사를 분리하면 Data Layer를 여러 화면에서 사용하고, 앱의 여러 부분 간에 정보를 공유하고, Unit Test를 위해 UI 외부에서 비즈니스 로직을 재현할 수 있음.

Data Layer Architecture

Data Layer는 0개부터 여러 개의 데이터 소스를 각각 포함할 수 있는 repositories로 구성됨.

앱에서 처리하는 다양한 유형의 데이터 별로 repositories class를 만들어야 함.

Repositories calss에서 담당하는 작업은

  • 앱의 나머지 부분에 데이터 노출
  • 데이터 변경사항을 한 곳에 집중
  • 여러 데이터 소스 간의 충돌 해결
  • 앱의 나머지 부분에서 데이터 소스 추상화
  • 비즈니스 로직 포함

각 Data sources calss는 파일, 네트워크 소스, 로컬 데이터베이스와 같은 하나의 Data source만 사용.

다른 Layer에서 Data Source에 직접 엑세스해서는 안됨. 항상 진입점은 Repositories class여야 함.

State holder classes 또는 Use case classes에는 데이터 소스가 직접 종속 항목으로 있어서는 안 됨.

Data Layer에서 노출된 데이터는 변경 불가능해야 함. 그래야 값을 일관되지 않은 상태로 만들 위험이 있는 다른 클래스에 의한 조작이 불가능해짐.

Expose APIs

data layer Classes는 CRUD호출을 실행하거나 시간 경과에 따른 데이터 변경사항에 관해 알림을 받는 함수를 노출.

  • One-shot operations : Data Layer에서 Kotlin의 suspend function을 노출해야 함.

  • 시간 경과에 따른 데이터 변경사항에 관해 알림을 받으러면: Data Layer에서 Kotlin flow를 노출해야 함.

0개의 댓글