概要
- MVVMやFRPを練習しやすいように、有名ドコロのライブラリを持ってきてサンプルを作る。
参考リンク
- MVVMをベースに複雑な振る舞いをしっかり把握できるアプリ開発
- GUIアーキテクチャパターンの基礎からMVVMパターンへ
- MVVMのModelにまつわる誤解 - the sea of fertility
今までのiOSの設計の流れをざっくり
MVC ( ~ 2012)
MVP ( ~ 2014)
MVVM ( ~ 2015 ~ )
ライブラリ
下記の◎○△xは、個人的な使い勝手です。
MVVM用 | FRP or タスク分割用 | 総サイズ | |
---|---|---|---|
RxSwift | ◎ | ◎ | 33MB |
ReactiveCocoa | △ | ○ | 26.8MB |
ReactKit | △ | ○ | 7.8MB |
ReactiveKit | |||
SwiftBond | ◎ | x | 7.4MB |
SwiftTask | x | ◎ | 2.6MB |
ライブラリのインターフェースの扱いやすさ(個人的な感想です。)
RxSwift ・扱いやすい/直感的 ・XCode等のコード補完が効きやすい |
ReactiveCocoa3.0(昔のもの) ・扱いにくい/理解に時間がかかる ・XCode等のコード補完が効きにくい |
||||
---|---|---|---|---|---|
RxSwift | SwiftBond SwiftTask |
ReactiveCocoa4.0 | ReactKit | ReactiveCocoa3.0 |
- ReactiveCocoaは、だんだんRxSwiftにインターフェースを寄せてきている印象
- ReactiveKit(≠ReactKit)は、RxSwiftに便利なExtension(例えばCollectionまわり)を足したような印象(調査不足..)
サイズ詳細
ライブラリ | framework1 | framework2 | framework3 |
---|---|---|---|
RxSwift | RxSwift.framework(22M) | RxCocoa.framework(9.6M) | RxBlocking.framework(648K) |
ReactiveCocoa | ReactiveCocoa.framework(26M) | Result.framework(872K) | |
ReactKit | ReactKit(5.4M) | SwiftTask.framework(2.8M) | |
SwiftBond | Bond.framework(7.1M) | ||
SwiftTask | SwiftTask.framework(2.8M) |
※実際にarchiveするとReactiveCocoaで10MB程度だった
個人的な使い勝手について
前提
- 方向性
- 最終的には、MVVM + FRP をアプリに組み込むことを目指している。
- MVVM + FRP 移行については、段階的に移行する。
- 移行順序
- 値変化の監視機能(KVO)を使ってMVVMを実現する。-> MVVM
- 値変化の監視機能を拡張(FRP)して監視能力に幅を持たせる。-> MVVM + FRP
前提を実現するために
- MVVM導入パート
- KVOの単純なWrapperとして扱うことができ、MVVMを実現出来るライブラリ。
- FRP用として扱うライブラリと互換性がある。
- 学習コストが低い。
- -> SwiftBond
- MVVM導入パート
- MVVM+FRPを実現できること。(FRPについては、ReactiveXでも可とする)
- -> SwiftBondからRxSwiftへ移行する。
ライブラリ選定の理由
- 初期は、MVVMだけの導入でいいのでチームの学習コストを抑えたい。
- SwiftBondとRxSwiftのインターフェースが似ている。
- (時間がある or チームのキャッチアップ力が高い 場合は、いきなりRxSwiftを利用する。)