ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android Package
    프로젝트/영어단어 잠금화면 2022. 12. 9. 15:50

    영어단어 잠금화면을 재개하면서, 기존 Package를 정리하는데 있어 고민하던 점을 기록해보고자 한다.

     

    현재 패키지 방식

    현재 패키지 방식은 Android의 권장 방식에 맞춰 data Layer, domain Layer(선택적), UI Layer(Presentation으로 표기)

    3가지의 패키지 방식을 차용한 뒤, Data Injection은 따로 패키지를 만들어 사용했다.

    또한, 공통적으로 사용하는 클래스 or 상수의 개념은 Constants 패키지를 만들어 Sealed Class를 통한 UiState와 Request 상황 대처 및 전역 상수를 Singleton으로 만들어 사용하고 있다.

     

    data, domain은 기존 하던대로 각 역할별로 구분해 패키지화를 진행했고, 이는 다음과 같다.

    data, domain 내부 패키지 모습

    해당 패키지는 계층별로 분리를 진행했으며, 계층별로 분리가 진행된 패키지들은 기능별로 다시 분리하고자 노력했다. 애초에 레포지토리를 구현하면서부터 하나의 전체 기능은 Repository로 구분했다. (예를 들어, Quiz면 Quiz, Word는 Word로 구분). 그 뒤 Quiz에 사용되는 Usecase를 구현해 하나의 세부적인 기능을 구현했다.

     

    Usecase에서는 하나의 기능을 하나의 케이스로 분리시켰다.

    현재는 이러한 방향성을 ViewModel에 적용해 하나의 기능을 하나의 데이터 반환 함수로 만들어 Fragment들과 ViewModel을 사용하고 있다.

     

    UI Layer에서는 도메인별로 나누어 각 기능을 하는 UI Component들과 ViewModel을 패키지화했다.

    fragments은 아직 옮기기가 덜 끝난 Fragment들이 남아있다.

    이를 통해, 각 화면 혹은 기능별로 패키지를 나누었고, 각 도메인별 패키지에는 ViewModel 및 Component들이 들어가 있다. 이곳에서부터는 다시 컴포넌트별로 들어가 있기 때문에 해당 코드에 대한 분석을 진행할 시 각 기능에 맞게끔 확인할 수 있게 만들었다.

     

    고민하고 있는 지점은 다음과 같다.

    • 만약 하나의 화면에 사용되어야 할 기능이 여러가지인 경우 ( Bluetooth의 상태 변화와 UI 갱신을 동시에 해줘야 할 경우와 같은...?) AAC ViewModel을 상속받은 ViewModel들은 하나의 Activity에 물려있는 것처럼 보이게 될 텐데 이런 경우 보통 여러개의 AAC ViewModel을 사용하는지, 만약 하나의 ViewModel로 통합한다면 (MainViewModel) 패키지를 나누는 측면에서는 어떻게 나누어야 하는지.

    답변이 있었으면 좋겠다..

     

    댓글

android, kerriganlove, successful