Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

iOS アプリのメンテナンス性を高めるための基本的な考え方

12.763 visualizaciones

Publicado el

2014/2/25 に開催された、ヤフー vs クラスメソッド Battle 3 の発表資料です。

Publicado en: Tecnología
  • Sé el primero en comentar

iOS アプリのメンテナンス性を高めるための基本的な考え方

  1. 1. iOS  アプリのメンテナンス性を ⾼高めるための基本的な考え⽅方 ヤフー  vs  クラスメソッド Battle  3 2014/2/25 Copylight  ©  Classmethod,  Inc. クラスメソッド  掛川 1
  2. 2. iOS  アプリのメンテナンスが⼤大変 Copylight  ©  Classmethod,  Inc. 2
  3. 3. メンテナンスがしやすくなるよう な設計をしたい Copylight  ©  Classmethod,  Inc. 3
  4. 4. いろいろありますが、 今回お話するのは1つだけです Copylight  ©  Classmethod,  Inc. 4
  5. 5. ViewController  から 本来記述すべきでない処理理を 切切り出す Copylight  ©  Classmethod,  Inc. 5
  6. 6. なぜ? Copylight  ©  Classmethod,  Inc. 6
  7. 7. ⼤大量量の処理理を抱え込んで  Fat  に なってしまった  ViewController  の メンテナンスは⼤大変 Copylight  ©  Classmethod,  Inc. 7
  8. 8. Fat  な  ViewController  の問題点 •  責務が多すぎる •  ⼤大量量のイベントハンド リング •  ロジックの再利利⽤用が難 しい Copylight  ©  Classmethod,  Inc. 8
  9. 9. どの処理理を切切り出せばいいの? Copylight  ©  Classmethod,  Inc. 9
  10. 10. ViewController  から切切り出すべき であるのは、 情報の表⽰示に関連しない機能 Copylight  ©  Classmethod,  Inc. 10
  11. 11. 情報の表⽰示に関連しない機能を 分離離する理理由 •  情報の表⽰示に関連しない機能を画⾯面に紐紐づく クラスで管理理したくない –  データや処理理、状態の共有や持ち運びができなく なる •  同じ関⼼心事に関する処理理はできるだけ1箇所にまと めたい –  画⾯面毎に実装すると処理理が分散してしまい、凝集 度度が低くなる Copylight  ©  Classmethod,  Inc. 11
  12. 12. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController データ 処理理 Copylight  ©  Classmethod,  Inc. ViewController 状態 12
  13. 13. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController データ 処理理 ViewController 状態 他の   ViewController  の 中⾝身を直接参照 Copylight  ©  Classmethod,  Inc. 13
  14. 14. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController データ × ViewController 処理理 Copylight  ©  Classmethod,  Inc. 状態 他の   ViewController  の 中⾝身を直接参照 共有しづらい 14
  15. 15. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController ViewController 利利⽤用 利利⽤用 委譲オブジェクト データ Copylight  ©  Classmethod,  Inc. 処理理 15 状態
  16. 16. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController ViewController 持ち運び可能 委譲オブジェクト データ Copylight  ©  Classmethod,  Inc. 処理理 16 状態
  17. 17. 機能を画⾯面に紐紐づくクラスで 管理理したくない ViewController ○ Copylight  ©  Classmethod,  Inc. ViewController 持ち運び可能 委譲オブジェクト データ 処理理 17 状態 共有しやすい
  18. 18. 同じ関⼼心事に関する処理理を 1箇所にまとめたい ViewController ViewController ユーザー名 更更新処理理 Copylight  ©  Classmethod,  Inc. パスワード 更更新処理理 18
  19. 19. 同じ関⼼心事に関する処理理を 1箇所にまとめたい ViewController ViewController ユーザー名 更更新処理理 × Copylight  ©  Classmethod,  Inc. パスワード 更更新処理理 アカウント情報に 関する処理理が分散 19
  20. 20. 同じ関⼼心事に関する処理理を 1箇所にまとめたい ViewController ViewController 利利⽤用 利利⽤用 アカウント情報管理理オブジェクト ユーザー名 更更新処理理 Copylight  ©  Classmethod,  Inc. パスワード 更更新処理理 20
  21. 21. 同じ関⼼心事に関する処理理を 1箇所にまとめたい ViewController ○ Copylight  ©  Classmethod,  Inc. ViewController アカウント情報管理理オブジェクト ユーザー名 更更新処理理 パスワード 更更新処理理 21 アカウント 情報に関する 処理理が集約
  22. 22. 切切り出した機能は、情報の表⽰示に 関連する機能に依存しない Copylight  ©  Classmethod,  Inc. 22
  23. 23. 情報の表⽰示に関連する機能に 依存しない理理由 •  情報の表⽰示に関連しない機能に特定の画⾯面の 実装を意識識させたくない –  特定の画⾯面を意識識した実装になっていると再利利⽤用 が難しくなる •  あくまで情報の表⽰示に関連しない機能に集中 させたい –  モジュール内で考えなければいけないことを少な くしたい Copylight  ©  Classmethod,  Inc. 23
  24. 24. じゃあ、ViewController  には どういった処理理を書けばいいの? Copylight  ©  Classmethod,  Inc. 24
  25. 25. ViewController  の役割について   Mediator  パターンの視点から 考えてみましょう Copylight  ©  Classmethod,  Inc. 25
  26. 26. Mediator  パターン Copylight  ©  Classmethod,  Inc. 26
  27. 27. Mediator  パターン オブジェクト  A オブジェクトの関係が 複雑 オブジェクト  C オブジェクト  B オブジェクト  D オブジェクト  E Copylight  ©  Classmethod,  Inc. 27
  28. 28. Mediator  パターン 仲介オブジェクト オブジェクト  A オブジェクト  E オブジェクト  B オブジェクト  D オブジェクト  C Copylight  ©  Classmethod,  Inc. 仲介オブジェクトが とりまとめ 28
  29. 29. Mediator  パターン 仲介オブジェクト オブジェクト  A オブジェクト  E オブジェクト  B オブジェクト間では やりとりをしない Copylight  ©  Classmethod,  Inc. 仲介オブジェクトが とりまとめ × オブジェクト  D オブジェクト  C 29
  30. 30. Mediator  パターン Mediator 仲介オブジェクト オブジェクト  A オブジェクト  E オブジェクト  B オブジェクト  D オブジェクト  C Copylight  ©  Classmethod,  Inc. 30
  31. 31. Mediator  パターン Mediator 仲介オブジェクト オブジェクト  A オブジェクト  E オブジェクト  B オブジェクト  D オブジェクト  C Copylight  ©  Classmethod,  Inc. 31 Colleague
  32. 32. View  Controllerは、ビュー階層に 代わって中⼼心的な調整役として機 能し、ビューとコントローラまた はデータオブジェクトの間のやり 取りに対処します。 「iOS  View  Controller  プログラミングガイド」より引⽤用 Copylight  ©  Classmethod,  Inc. 32
  33. 33. View  Controllerは、ビュー階層に 代わって中⼼心的な調整役として機 能し、ビューとコントローラまた はデータオブジェクトの間のやり 取りに対処します。 「iOS  View  Controller  プログラミングガイド」より引⽤用 Copylight  ©  Classmethod,  Inc. 33
  34. 34. ViewController  は  Mediator  パ ターンにおける  Mediator  とみな すことができる Copylight  ©  Classmethod,  Inc. 34
  35. 35. ViewController  が仲介する   Colleague Mediator ViewController UI UI Colleague Copylight  ©  Classmethod,  Inc. 35
  36. 36. ViewController  が仲介する   Colleague Mediator UI UI ViewController ChildViewController ChildViewController Colleague Copylight  ©  Classmethod,  Inc. 36
  37. 37. ViewController  が仲介する   Colleague Mediator UI UI ViewController ChildViewController ChildViewController Colleague Copylight  ©  Classmethod,  Inc. 37 情報の表⽰示に関連し ないモジュール Model
  38. 38. ViewController  と  Colleague  の 間のやりとり Mediator ViewController Colleague UI Copylight  ©  Classmethod,  Inc. 38
  39. 39. ViewController  と  Colleague  の 間のやりとり Mediator ViewController Colleague UI 状態が変化 Copylight  ©  Classmethod,  Inc. 39
  40. 40. ViewController  と  Colleague  の 間のやりとり Mediator ViewController イベント通知 Colleague UI 状態が変化 Copylight  ©  Classmethod,  Inc. 40
  41. 41. ViewController  と  Colleague  の 間のやりとり Mediator ViewController イベント通知 •  Target-‐‑‒Action •  Delegate  など Colleague UI 状態が変化 Copylight  ©  Classmethod,  Inc. 41
  42. 42. ViewController  と  Colleague  の 間のやりとり Mediator ViewController UI UI Colleague Copylight  ©  Classmethod,  Inc. 42
  43. 43. ViewController  と  Colleague  の 間のやりとり Mediator イベントを 受信 ViewController UI UI Colleague Copylight  ©  Classmethod,  Inc. 43
  44. 44. ViewController  と  Colleague  の 間のやりとり Mediator イベントを 受信 ViewController 適切切な指⽰示 UI UI Colleague Copylight  ©  Classmethod,  Inc. 44
  45. 45. ViewController  と  Colleague  の 間のやりとり Mediator イベントを 受信 ViewController 適切切な指⽰示 •  プロパティにセット •  メソッド呼び出し UI UI Colleague Copylight  ©  Classmethod,  Inc. 45
  46. 46. Colleague  間ではお互いの存在に ついて直接意識識しない Copylight  ©  Classmethod,  Inc. 46
  47. 47. まとめ •  ViewController  から情報の表⽰示に関連しないモジュールを切切 り離離す •  情報の表⽰示に関連しないモジュールは、ViewController  など の情報の表⽰示に関連するモジュールに依存しない •  ViewController  は⾃自⾝身が参照するオブジェクトの間の仲介役 を主な役割とする •  ViewController  が仲介するオブジェクトは  ViewController   経由で連携し、互いの存在について直接意識識しない Copylight  ©  Classmethod,  Inc. 47
  48. 48.  ご静聴ありがとうございました Copylight  ©  Classmethod,  Inc. 48

×