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