MVVM/BFによるAndroidアプリのClearn ArchitectureとDomain Driven Design導入
- 今年一番スッキリした設計パターン
- いつかアウトプットしたい
- いつだろうか?
Toc
MVVM/BF解説
- 各層の役割
- Model
- ViewModel
- JetpackのViewModelやDataBinding
- View
- Bridge
- Modelを実装した、実装・プラットフォーム依存層
- 通信をOkHttpに依存したり、Firebase SDKに依存したりする
- Factory
- BridgeとViewModelの中間を担う
- 実体(インスタンス)の正体を知っている唯一の存在
- DIライブラリを導入する唯一の層
Model層の役割
Bridge-Factoryの役割
- 各層の依存関係
- 実装はBridge層が行う
- インターフェースの振り分けはFactory層が行う
- Bridge層の公開クラスと非公開クラス
View/ViewModel層の役割
- ActivityとFragmentの役割
- FragmentからActivityへメッセージを送る
- FragmentMainとCallbackパターン
- ViewModelを使うパターンと使わないパターン
- Eventパターン
- FragmentはいつstartActivityを呼ぶか?
- 論理画面内であれば呼ぶ
- 例えばGoogle認証は同じ論理画面なのでFragmentから呼ぶ
DIライブラリに依存しないDI
- Kotlin言語機能のみでの依存注入
- Factory層で完結する依存注入
- DIライブラリの詳細をViewModel層へ伝えない
プロジェクト構成例
- 前提条件
- 強力なPCを使うことが、実現への第一歩
- 設計力矯正ギブスをつける
- domain/bridge/factory/appで分ける
- build.graldeの
implementation
とapi
を使い分ける - Kotlinの
internal
仕様を活用する - 小分けしたModuleの初期化例
共通UIウィジェットの扱い方
- 共有UIはBridge/Factoryに依存しない
- 依存しないのに、誰がModelとView/ViewModelを結ぶのか
- Callbackパターンを使う
QRコード読み取りの例
- Model層での設計
- Bridge層での実装
- Zxing実装版
- Google Play Mobile Vision実装版
- Factory層での振り分け