MVCもやもや話
Upcoming SlideShare
Loading in...5
×
 

MVCもやもや話

on

  • 6,220 views

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

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

Statistics

Views

Total Views
6,220
Views on SlideShare
5,994
Embed Views
226

Actions

Likes
22
Downloads
19
Comments
1

4 Embeds 226

http://social-window.com 209
https://twitter.com 14
https://web.tweetdeck.com 2
https://si0.twimg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 正にViewControllerに書いてるロジックを分離したくて仕方がないのが今。ひと通り機能を実装して、その後分離作業をする時に再度参考にしよう。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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もやもや話 MVCもやもや話 Presentation Transcript

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