MVCもやもや話

10,330 views

Published on

iOS アプリ開発でのMVCについて。すべてを View Controller に書いてしまいがちなのを避けたい。

Published in: Technology
1 Comment
34 Likes
Statistics
Notes
  • 正にViewControllerに書いてるロジックを分離したくて仕方がないのが今。ひと通り機能を実装して、その後分離作業をする時に再度参考にしよう。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
10,330
On SlideShare
0
From Embeds
0
Number of Embeds
1,161
Actions
Shares
0
Downloads
34
Comments
1
Likes
34
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • MVCもやもや話

    1. 1. MVCもやもや話かねうちてつや @kaniza2012.05.19Cocoa勉強会関西
    2. 2. 自己紹介
    3. 3. •かねうちてつや (@kaniza, id:kaniza)
    4. 4. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目)
    5. 5. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定
    6. 6. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定•最近わりと開発モード
    7. 7. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定•最近わりと開発モード •ARCとかStoryboardとかPush Notificationとか
    8. 8. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定•最近わりと開発モード •ARCとかStoryboardとかPush Notificationとか •相変わらずEmacsでObjective-C
    9. 9. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定•最近わりと開発モード •ARCとかStoryboardとかPush Notificationとか •相変わらずEmacsでObjective-C•自炊モード
    10. 10. •かねうちてつや (@kaniza, id:kaniza)•Cocoa勉強会関西代表(2代目) •KOF2012 11/9-10 で開催予定•最近わりと開発モード •ARCとかStoryboardとかPush Notificationとか •相変わらずEmacsでObjective-C•自炊モード •大型断裁機をレンタルして本バラしまくり
    11. 11. 自炊(雑談です)
    12. 12. これまでのカッター
    13. 13. レンタルした断裁機:20kg
    14. 14. レンタルした断裁機:20kg
    15. 15. O社の分厚い本も一撃!
    16. 16. 本題の前置き
    17. 17. よい設計とは: 疎結合・高凝集•疎結合•構成する部分どうしの関連性が最小限•具体的結合よりは抽象的結合•相互依存は悪•高凝集•関連性の高いものが一カ所にまとまっている•変更する時はそこだけいじればいい
    18. 18. 本題
    19. 19. Model-View-Controller
    20. 20. Model View Controllerソフトウェアのデザイン(設計)パターンの1つ
    21. 21. Model-View-Controller
    22. 22. Model-View-Controller• オブジェクト指向のGUIアプリ向け
    23. 23. Model-View-Controller• オブジェクト指向のGUIアプリ向け• Appleが基本パターンとして採用
    24. 24. Model-View-Controller• オブジェクト指向のGUIアプリ向け• Appleが基本パターンとして採用• Smalltalk由来の歴史ある考え方
    25. 25. Model-View-Controller• オブジェクト指向のGUIアプリ向け• Appleが基本パターンとして採用• Smalltalk由来の歴史ある考え方• (オブジェクト指向と同じく)人に よって言うことが違う
    26. 26. 意義•役割分担させることで構造がわかりやすくなる•分離したM-V-Cを(理想的には)それぞれ取り替えて再利用できる•ひとつのMで複数のVを持つなどの設計が容易になる•ModelロジックとViewロジックが分類できる•Modelのテストを自動化しやすい
    27. 27. Model• そのアプリ、画面の存在意義の部分• データ保持、特殊な処理 • ビジネスロジック• GUIとは分離している • ViewやControllerのことは知らない
    28. 28. View• ソフトウェアを人間に知覚させ、操作 させる• データの表示• コマンドの入力• Modelのことを知っているが、Controller のことは知らない
    29. 29. Controller• ModelとViewをつなぐ• Viewからの入力をModelに反映• Modelの変化をViewに反映• ModelのこともViewのことも知っている• なくても済めば要らない部分(だけど ないと動かない)
    30. 30. ModelView Controller
    31. 31. イメージ•Model: ないと意味がない•View: ないと使えない•Controller: ないと動かない
    32. 32. iOS開発ありがちパターン•とりあえずnibで画面を作る•動きをView Controllerに実装•さらにView Controllerに実装•View Controllerバンザイ!!•MVCなにそれ?
    33. 33. ViewControllerばっかり ABCViewController XYZViewController Other Classes
    34. 34. View Controllerとは•Viewではない•MVCではControllerに属する•ViewのController•ModelのControllerがあってもいい •NSDocumentとか
    35. 35. 考える順番をかえてみる•画面をまず考えるのはOK•その画面のModelは何か? •どんな情報があるか? •どんな機能、ロジックがあるか?•Modelを作る •データ取得やキモとなるロジック•View ControllerにはModelとViewを仲介する 部分を実装
    36. 36. 実際やってみようとすると
    37. 37. Modelが勝手に変わったのをViewはどうやって知るの? Model View Controller Viewが受けとった入力を Controllerはどうやって知るの?
    38. 38. 通知Model View 監視 相互依存は悪!!
    39. 39. 必要なもの
    40. 40. ModelがViewを知らなくても変更が通知できるようにする
    41. 41. Observerパターン(GoFのデザインパターン参照)
    42. 42. 通知 Model Observer 実現 監視 ViewModelは抽象的・間接的にViewを参照
    43. 43. CocoaでのObserverパターン
    44. 44. Key-Value Observing
    45. 45. NSKeyValueObserving// 監視する- (void)addObserver:(NSObject *)anObserverforKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context;// 通知する- (void)willChangeValueForKey:(NSString *)key;- (void)didChangeValueForKey:(NSString *)key;// 通知を受けとる- (void)observeValueForKeyPath:(NSString *)keyPathofObject:(id)object change:(NSDictionary *)changecontext:(void *)context
    46. 46. NSKeyValueObserving•NSObjectで対応•通知は @synthesize したプロパティを変更し たら自動で発動 •self.foo = @”newVal”;•とーっても簡単!!
    47. 47. このパターンは他にも使える Model Observer 実現 View
    48. 48. たとえばDelegateの場合 Model ModelDelegate 実現 ViewController
    49. 49. こういうアプリよりも ABCViewController XYZViewController Other Classes
    50. 50. こういうアプリを目指したい ABCViewController XYZViewController ABCModel XYZModel Other Classes
    51. 51. AppleのドキュメントYour Second iOS App: Storyboardshttps://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/SecondiOSAppTutorial/Introduction/Introduction.html単純だけどあえてModelレイヤを分離した設計を採用
    52. 52. まとめ•View Controllerにすべてを書くのはやめよう•Modelが何なのかを考えて作ってみよう•オブジェクト間の連携にはObserverやDelegateを使って疎結合を保とう•Singletonは避けよう!(これはまたいつか)
    53. 53. Q&A

    ×