GithubMVI
Git push HackthonのためのGithubクライアントアプリ
実行方法
Githubでアプリを登録し、clientIdとclientSecretを取得してください。その際にAuthorization callback URLにgithub-mvi://oauth
を指定してください。
取得したclientIdとclientSecretは、プロジェクトルートのlocal.properties
に下記のように入力してください。
...
CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxx
CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxx
...
テスト
src/test
下にViewModelのテストがあります。Android Studio上で実行してください。
仕様について
画面数は4で、それぞれ
- ログイン画面(ログイン以降はスプラッシュ画面として機能)
- イベント一覧画面
- レポジトリ詳細画面(レポジトリに対するスターの登録/削除)
- ユーザー詳細画面(ユーザーに対するフォロー/フォロー解除) です。
設計
今回はこちらのMVIパターンを採用しました。Ankoを使ったのでViewの部分にUI層が加わっています。
それぞれのレイヤーについて
Repositroy層、ViewModel層、Activity層、UI層に分けて設計しています。
Repository層
Realmを使ったLocalDataStoreと、Retrofitを使ったRemoteDataStoreをRepositoryでまとめています。LocalDataStoreはログインデータを保存するのみでキャッシュ的な使い方はしていません。
ViewModel層
アプリのロジックを担当する層で、Intentの入力に対して、ViewStateを返します。Android固有のロジックから切り離されているので簡単にユニットテストが書けます。
Activity層
ViewModel層とUI層の橋渡しとActivity遷移などのAndroid固有のロジックのみを担当します。ビューの管理を後述のUI層が行うので他のアーキテクチャに比べて役割はかなり少ないです。
UI層
ankoLayoutライブラリを使ってkotlinでビューを作成しています。PublishSubject経由でイベントをActivity層に通知し、ビューの更新はViewStateの変更通知のみによって行うので、レイアウトが複雑になっても入力と出力をシンプルに保てます。
UI/UXについて
デザインには自信がないのでサンプルアプリっぽい感じにしました。イベント一覧画面は最後までスクロールしたら追加のイベントを取得する実装にして、一覧性と操作性をあげています。 レポジトリ詳細、ユーザー詳細画面はほとんど同じで、CoordinatorLayoutを使って実装しています。