Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

12.759 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

×