PokeDictionary

1. used libraries

사용한 외부 라이브러리는 아래와 같습니다.

2. Modules

clean architecture를 참고 하여 아래와 같은 목적으로 app모듈을 분리 하였습니다.

  1. 비즈니스 로직 수행 코드뷰 로직 수행 코드의 분리
  2. 각 모듈 단위의 테스트 수행

각 모듈별 관계는 아래와 같습니다.

app > model > common

  • app모듈은 common, model모듈들을 알고 있습니다.
  • model모듈은 common모듈만 알고 있습니다.
  • common모듈은 다른 모듈과 관계를 갖고 있지 않습니다.

2.1 app 모듈

app모듈의 목적은 기존 app과 동일 하지만 비즈니스 로직을 제거 하고, 안드로이드 컴포넌트에 의존을 갖는 코드들이 존재 합니다.

2.1.1 base 패키지

  • 공통적으로 사용 되는 클래스, 함수의 구현 및 확장 함수
  • databinding에 사용 될 공통 binding adapter 함수
  • BaseFragment 클래스
  • Koin 컴포넌트들 정의
  • model모듈 에서 app모듈에 의존을 갖는 리소스, 모듈 등에 접근 하기 위한 Helper인터페이스들의 구현 클래스.

2.1.2 repositories 패키지

  • Retrofit에서 사용 될 api인터페이스 정의
  • model모듈에서 네트워크 모듈을 사용하기 위한 Repository인터페이스의 구현 클래스. (보통 인터페이스 이름 뒤에 impl을 붙임)

2.1.3 view 패키지

  • 각 도메인 별 Activity, Fragment 구현
  • 안드로이드 컴포넌트, 뷰 에 의존을 갖는 클래스들
    • ex) ListAdapter, ViewHolder, DiffUtil.Callback등 의 구현. data binding adapter 함수

2.1.4 resource

  • Navigation graph xml 파일
  • layout, drawable 등 xml리소스 파일

2.2 model 모듈

model모듈의 목적은 각 도메인별 비즈니스 로직의 수행과 ViewModel의 구현 및 관리 입니다.
비즈니스 로직의 수행을 위해 관련된 기본, 공통모듈들이 구현 되어 있습니다.

2.2.1 base 패키지

  • 각 서브 도메인에서 app모듈에대한 의존이 필요한 경우(리소스 id, AOS의존 생기는 작업 등) 해당 작업을 정의한 인터페이스 인 Helper의 정의.
  • BaseViewModel
    • reactivex옵저버 관련하여 disposabler객체를 안드로이드 컴포넌트 생명주기에 동기화 하여 필요시 dispose()시켜주는 RxDisposer인터페이스.
  • 그 외 유틸리티 함수 및 확장 함수들

2.2.2 domain 패키지

  • 서브 도베인별로 나뉘어진 하위 패키지
    • 도메인에 종속된 Helper인터페이스 들
    • ViewModel클래스 들
      • LiveData로 이루어진 데이터 매핑 인스턴스 들
    • RecyclerView에서 사용 될 클래스 들
      • 아이템 데이터 클래스
  • 공통 도메인 하위 패키지

2.3 common 모듈

  • Constants글로벌 상수 들
  • string 문자열 리소스 xml
  • 그 외 유틸리티 및 확장 함수들