Skip to content

Kaiketch/newt-architecture-example

Repository files navigation

newt-architecture-example

海外旅行予約アプリ「NEWT」(ニュート) のAndroidアーキテクチャ構想用

主な技術スタック

  • Jetpack Compose
  • Coroutines
  • Hilt
  • Navigation Compose
  • Apollo GraphQL
  • Data Store
  • multi-module project
  • Clean Archtecture

モジュール構成と依存関係

  • Ui/Data/Domainの水平方向の分割と、UI、Data内の垂直方向の分割の組み合わせ
  • モジュール分割と実装Classのinternal化で非推奨の依存はコンパイルエラーに仕向ける
  • GraphQL(Apollo)には依存させずSchemaはRepository実装モジュールに閉じる方針とする

アーキテクチャ概要

  • Screen
    • 表示とイベント受付を担当
    • 監視するStateはトップレベルのComposableでのみ保持し各UIに反映
    • イベントは全てViewModelに渡す
  • ViewModel
    • 状態(StateFlow)の保持と更新を担当
    • イベントを受けてDomain層に処理を依頼し状態を更新
    • プラットフォーム固有のロジック(UseCase)も一旦ここで
  • Model
    • ビジネスロジックを担当
  • Repository
    • 永続化層とのデータの入出力を担当
    • Domain層にInterface、実装はData層で定義することでデータフローと依存を逆転
    • 永続化層のデータはModelに変換して返す

画面構成と状態スコープ

  • シングルActivity + JetpackCompose
  • 画面構成と遷移はNavigationコンポーネントで定義
  • Hilt x NavigationComposeで、状態(UiState of ViewModel)をActivity or NavigationGraph(Screen)にスコープ

Screens

SearchScreen ProfileScreen CountryScreen

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages