Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RxSwift + MVVM

RxSwift + MVVM

Reactive Swift Meetup at Wantedly

8889da6a67db3667b0694d993c9a962c?s=128

Yosuke Ishikawa

April 13, 2016
Tweet

Transcript

  1. RxSwi + MVVM ishkawa

  2. ishkawa?

  3. 近況 新プロジェクトでRxSwi をハー ドに使った 試行錯誤で大変だったけど良いところもわかってきた

  4. RxSwi + MVVM を前提とした設計

  5. MVVM: レイヤー の切り分けが良い感じ

  6. UI は変わりやすい

  7. デー タの操作は変わりにくい

  8. None
  9. None
  10. RxSwi : デー タのUI への反映が自動的

  11. None
  12. None
  13. None
  14. None
  15. を3 行で の値が流れてくる川 演算できる (map, filter, zip など) に接続できる

  16. None
  17. None
  18. None
  19. c l a s s T w e e t

    V i e w : U I V i e w { . . . f u n c b i n d ( ) { v i e w . l i k e B u t t o n . r x _ t a p . b i n d T o ( v i e w M o d e l . l i k e T r i g g e r ) . a d d D i s p o s a b l e T o ( d i s p o s e B a g ) v i e w M o d e l . l i k e d . b i n d T o ( v i e w . l i k e B u t t o n . r x _ s e l e c t e d ) . a d d D i s p o s a b l e T o ( d i s p o s e B a g ) } }
  20. View 1 度ストリー ムを繋いでしまえば反映は自動的 やることは入出力のストリー ムを接続するだけ 実装コストは低いので頻繁に変更されてもつらくない

  21. ViewModel 実装コストは高いが変更されにくい

  22. 画面を跨ぐグロー バルなイベント

  23. None
  24. 状態の変更は画面間で共有されてほしい グロー バルなものはグロー バルなもので表そう

  25. f i n a l c l a s s

    G l o b a l O b s e r v a b l e s { s t a t i c l e t l i k e d T w e e t = P u b l i s h S u b j e c t < T w e e t > ( ) }
  26. であり でもある グロー バルな があると... どこからでも変更を流せる どこからでも変更を購読できる

  27. None
  28. None
  29. None
  30. None
  31. None
  32. None
  33. 変更はグロー バルな で通知 値の送信も購読もViewModel が担当する View にはViewModel の値をバインドするだけ View は画面間の同期について考える必要がない

    バインドしてれば自動的に同期される
  34. None
  35. まとめ

  36. MVVM のレイヤー の切り分けは良い感じ 変更の反映が自動的に行われる グロー バルな変更も同様に接続できる その結果... 変更されやすい箇所の実装コストを下げられる 実装コストが高いところは変更されにくくなる