SlideShare a Scribd company logo
iOS  アプリのメンテナンス性を
⾼高めるための基本的な考え⽅方
ヤフー  vs  クラスメソッド
Battle  3
2014/2/25

Copylight  ©  Classmethod,  Inc.

クラスメソッド  掛川

1
iOS  アプリのメンテナンスが⼤大変

Copylight  ©  Classmethod,  Inc.

2
メンテナンスがしやすくなるよう
な設計をしたい

Copylight  ©  Classmethod,  Inc.

3
いろいろありますが、
今回お話するのは1つだけです

Copylight  ©  Classmethod,  Inc.

4
ViewController  から
本来記述すべきでない処理理を
切切り出す

Copylight  ©  Classmethod,  Inc.

5
なぜ?

Copylight  ©  Classmethod,  Inc.

6
⼤大量量の処理理を抱え込んで  Fat  に
なってしまった  ViewController  の
メンテナンスは⼤大変

Copylight  ©  Classmethod,  Inc.

7
Fat  な  ViewController  の問題点
•  責務が多すぎる
•  ⼤大量量のイベントハンド
リング
•  ロジックの再利利⽤用が難
しい

Copylight  ©  Classmethod,  Inc.

8
どの処理理を切切り出せばいいの?

Copylight  ©  Classmethod,  Inc.

9
ViewController  から切切り出すべき
であるのは、
情報の表⽰示に関連しない機能

Copylight  ©  Classmethod,  Inc.

10
情報の表⽰示に関連しない機能を
分離離する理理由

•  情報の表⽰示に関連しない機能を画⾯面に紐紐づく
クラスで管理理したくない

–  データや処理理、状態の共有や持ち運びができなく
なる

•  同じ関⼼心事に関する処理理はできるだけ1箇所にまと
めたい
–  画⾯面毎に実装すると処理理が分散してしまい、凝集
度度が低くなる
Copylight  ©  Classmethod,  Inc.

11
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController
データ

処理理

Copylight  ©  Classmethod,  Inc.

ViewController
状態

12
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController
データ

処理理

ViewController
状態
他の  
ViewController  の
中⾝身を直接参照

Copylight  ©  Classmethod,  Inc.

13
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController
データ

×

ViewController

処理理

Copylight  ©  Classmethod,  Inc.

状態
他の  
ViewController  の
中⾝身を直接参照

共有しづらい

14
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController

ViewController

利利⽤用

利利⽤用

委譲オブジェクト
データ

Copylight  ©  Classmethod,  Inc.

処理理

15

状態
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController

ViewController

持ち運び可能

委譲オブジェクト
データ

Copylight  ©  Classmethod,  Inc.

処理理

16

状態
機能を画⾯面に紐紐づくクラスで
管理理したくない
ViewController

○

Copylight  ©  Classmethod,  Inc.

ViewController

持ち運び可能

委譲オブジェクト
データ

処理理

17

状態

共有しやすい
同じ関⼼心事に関する処理理を
1箇所にまとめたい
ViewController

ViewController

ユーザー名
更更新処理理

Copylight  ©  Classmethod,  Inc.

パスワード
更更新処理理

18
同じ関⼼心事に関する処理理を
1箇所にまとめたい
ViewController

ViewController

ユーザー名
更更新処理理

×

Copylight  ©  Classmethod,  Inc.

パスワード
更更新処理理

アカウント情報に
関する処理理が分散

19
同じ関⼼心事に関する処理理を
1箇所にまとめたい
ViewController

ViewController

利利⽤用

利利⽤用
アカウント情報管理理オブジェクト
ユーザー名
更更新処理理

Copylight  ©  Classmethod,  Inc.

パスワード
更更新処理理

20
同じ関⼼心事に関する処理理を
1箇所にまとめたい
ViewController

○

Copylight  ©  Classmethod,  Inc.

ViewController

アカウント情報管理理オブジェクト
ユーザー名
更更新処理理

パスワード
更更新処理理

21

アカウント
情報に関する
処理理が集約
切切り出した機能は、情報の表⽰示に
関連する機能に依存しない

Copylight  ©  Classmethod,  Inc.

22
情報の表⽰示に関連する機能に
依存しない理理由

•  情報の表⽰示に関連しない機能に特定の画⾯面の
実装を意識識させたくない

–  特定の画⾯面を意識識した実装になっていると再利利⽤用
が難しくなる

•  あくまで情報の表⽰示に関連しない機能に集中
させたい

–  モジュール内で考えなければいけないことを少な
くしたい

Copylight  ©  Classmethod,  Inc.

23
じゃあ、ViewController  には
どういった処理理を書けばいいの?

Copylight  ©  Classmethod,  Inc.

24
ViewController  の役割について  
Mediator  パターンの視点から
考えてみましょう

Copylight  ©  Classmethod,  Inc.

25
Mediator  パターン

Copylight  ©  Classmethod,  Inc.

26
Mediator  パターン
オブジェクト  A

オブジェクトの関係が
複雑

オブジェクト  C

オブジェクト  B

オブジェクト  D
オブジェクト  E

Copylight  ©  Classmethod,  Inc.

27
Mediator  パターン
仲介オブジェクト

オブジェクト  A

オブジェクト  E

オブジェクト  B

オブジェクト  D
オブジェクト  C

Copylight  ©  Classmethod,  Inc.

仲介オブジェクトが
とりまとめ

28
Mediator  パターン
仲介オブジェクト

オブジェクト  A

オブジェクト  E

オブジェクト  B
オブジェクト間では
やりとりをしない
Copylight  ©  Classmethod,  Inc.

仲介オブジェクトが
とりまとめ

×

オブジェクト  D
オブジェクト  C

29
Mediator  パターン
Mediator

仲介オブジェクト

オブジェクト  A

オブジェクト  E

オブジェクト  B

オブジェクト  D
オブジェクト  C

Copylight  ©  Classmethod,  Inc.

30
Mediator  パターン
Mediator

仲介オブジェクト

オブジェクト  A

オブジェクト  E

オブジェクト  B

オブジェクト  D
オブジェクト  C

Copylight  ©  Classmethod,  Inc.

31

Colleague
View  Controllerは、ビュー階層に
代わって中⼼心的な調整役として機
能し、ビューとコントローラまた
はデータオブジェクトの間のやり
取りに対処します。
「iOS  View  Controller  プログラミングガイド」より引⽤用

Copylight  ©  Classmethod,  Inc.

32
View  Controllerは、ビュー階層に
代わって中⼼心的な調整役として機
能し、ビューとコントローラまた
はデータオブジェクトの間のやり
取りに対処します。
「iOS  View  Controller  プログラミングガイド」より引⽤用

Copylight  ©  Classmethod,  Inc.

33
ViewController  は  Mediator  パ
ターンにおける  Mediator  とみな
すことができる

Copylight  ©  Classmethod,  Inc.

34
ViewController  が仲介する  
Colleague

Mediator

ViewController

UI
UI

Colleague
Copylight  ©  Classmethod,  Inc.

35
ViewController  が仲介する  
Colleague

Mediator

UI
UI

ViewController

ChildViewController
ChildViewController

Colleague
Copylight  ©  Classmethod,  Inc.

36
ViewController  が仲介する  
Colleague

Mediator

UI
UI

ViewController

ChildViewController
ChildViewController

Colleague
Copylight  ©  Classmethod,  Inc.

37

情報の表⽰示に関連し
ないモジュール
Model
ViewController  と  Colleague  の
間のやりとり

Mediator

ViewController

Colleague

UI

Copylight  ©  Classmethod,  Inc.

38
ViewController  と  Colleague  の
間のやりとり

Mediator

ViewController

Colleague

UI

状態が変化
Copylight  ©  Classmethod,  Inc.

39
ViewController  と  Colleague  の
間のやりとり

Mediator

ViewController

イベント通知

Colleague

UI

状態が変化
Copylight  ©  Classmethod,  Inc.

40
ViewController  と  Colleague  の
間のやりとり

Mediator

ViewController

イベント通知
•  Target-‐‑‒Action
•  Delegate  など

Colleague

UI

状態が変化
Copylight  ©  Classmethod,  Inc.

41
ViewController  と  Colleague  の
間のやりとり

Mediator

ViewController

UI

UI

Colleague
Copylight  ©  Classmethod,  Inc.

42
ViewController  と  Colleague  の
間のやりとり

Mediator

イベントを
受信

ViewController

UI

UI

Colleague
Copylight  ©  Classmethod,  Inc.

43
ViewController  と  Colleague  の
間のやりとり

Mediator

イベントを
受信

ViewController
適切切な指⽰示

UI

UI

Colleague
Copylight  ©  Classmethod,  Inc.

44
ViewController  と  Colleague  の
間のやりとり

Mediator

イベントを
受信

ViewController
適切切な指⽰示
•  プロパティにセット
•  メソッド呼び出し

UI

UI

Colleague
Copylight  ©  Classmethod,  Inc.

45
Colleague  間ではお互いの存在に
ついて直接意識識しない

Copylight  ©  Classmethod,  Inc.

46
まとめ
•  ViewController  から情報の表⽰示に関連しないモジュールを切切
り離離す
•  情報の表⽰示に関連しないモジュールは、ViewController  など
の情報の表⽰示に関連するモジュールに依存しない
•  ViewController  は⾃自⾝身が参照するオブジェクトの間の仲介役
を主な役割とする
•  ViewController  が仲介するオブジェクトは  ViewController  
経由で連携し、互いの存在について直接意識識しない

Copylight  ©  Classmethod,  Inc.

47
 ご静聴ありがとうございました

Copylight  ©  Classmethod,  Inc.

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

More Related Content

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