SlideShare a Scribd company logo
MVCもやもや話




かねうちてつや @kaniza
2012.05.19
Cocoa勉強会関西
自己紹介
MVCもやもや話
•かねうちてつや (@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のことも知っている
• なくても済めば要らない部分(だけど
  ないと動かない)
Model




View           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



                    実現
          監視
                 View




Modelは抽象的・間接的にViewを参照
CocoaでのObserverパターン
Key-Value Observing
NSKeyValueObserving

// 監視する
- (void)addObserver:(NSObject *)anObserver
forKeyPath:(NSString *)keyPath options:
(NSKeyValueObservingOptions)options context:(void
*)context;

// 通知する
- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;

// 通知を受けとる
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change
context:(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: Storyboards
https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/
SecondiOSAppTutorial/Introduction/Introduction.html




単純だけどあえてModelレイヤを分離した設計を採用
まとめ
•View Controllerにすべてを書くのはやめよう
•Modelが何なのかを考えて作ってみよう
•オブジェクト間の連携にはObserverや
Delegateを使って疎結合を保とう

•Singletonは避けよう!(これはまたいつか)
Q&A

More Related Content

PDF
あの日見たMVCを僕たちはまだ知らない for RoR
PDF
ブラック企業から学ぶMVCモデル
ODP
MVC の Model を考える
PDF
SQLアンチパターン - ジェイウォーク
PDF
GUI アプリケーションにおける MVC
PDF
ドメイン駆動設計(DDD)の実践Part2
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
ドメイン駆動設計入門
あの日見たMVCを僕たちはまだ知らない for RoR
ブラック企業から学ぶMVCモデル
MVC の Model を考える
SQLアンチパターン - ジェイウォーク
GUI アプリケーションにおける MVC
ドメイン駆動設計(DDD)の実践Part2
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
ドメイン駆動設計入門

What's hot (20)

KEY
やはりお前らのMVCは間違っている
PDF
MvcのFatモデルに立ち向かう
PPTX
GraphQLのsubscriptionで出来ること
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
オブジェクト指向できていますか?
PPTX
Aws amplify studioが変えるフロントエンド開発の未来とは v2
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
DevOps with Database on AWS
PDF
今さら聞けないDiとspring
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
GoによるWebアプリ開発のキホン
PDF
実践に向けたドメイン駆動設計のエッセンス
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
PDF
実装して理解するLINE LoginとOpenID Connect入門
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
「情報」を「書く」ということ(仮) #RedmineJapan
PPTX
今だから!Amazon CloudFront 徹底活用
PDF
データベース設計徹底指南
やはりお前らのMVCは間違っている
MvcのFatモデルに立ち向かう
GraphQLのsubscriptionで出来ること
プログラムの処方箋~健康なコードと病んだコード
ドメイン駆動設計のための Spring の上手な使い方
オブジェクト指向できていますか?
Aws amplify studioが変えるフロントエンド開発の未来とは v2
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
DevOps with Database on AWS
今さら聞けないDiとspring
ドメインオブジェクトの見つけ方・作り方・育て方
ドメイン駆動設計 ( DDD ) をやってみよう
GoによるWebアプリ開発のキホン
実践に向けたドメイン駆動設計のエッセンス
ASP.NETの進化とASP.NET Core Blazorの凄さ
実装して理解するLINE LoginとOpenID Connect入門
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
「情報」を「書く」ということ(仮) #RedmineJapan
今だから!Amazon CloudFront 徹底活用
データベース設計徹底指南
Ad

Viewers also liked (20)

PDF
PDF
Container view活用術とポイントになる部分
PDF
PDF
PPTX
1 2 neo revolution
PDF
Spectroscopy Letters Volume 26 issue 3 1993 [doi 10.1080_00387019308011552] S...
PDF
شرح رساله افسس القس ابراهيم سعيد
PPTX
PDF
France
PDF
No hiv aids no hcv
PDF
فن الحياة الناجحة أبونا متى المسكين
PDF
Mobile Computing IEEE 2014 Projects
PPTX
Byzantium
PPT
數位時代的直接民主可能
PPTX
INTERNET I EINES 2.0 PER FACILITAR LA TASCA DE COMANDAMENT Sessió 2
PDF
Cenário Botafogo, Lançamento Mozak, Apartamentos no Rio, 2 quartos em Botafog...
PDF
Michel Foucault - Discipline and Punish
PDF
IoMT - Technological Environment of Personalized Medicine and New Era of Heal...
PPTX
1 1 clues and sources
Container view活用術とポイントになる部分
1 2 neo revolution
Spectroscopy Letters Volume 26 issue 3 1993 [doi 10.1080_00387019308011552] S...
شرح رساله افسس القس ابراهيم سعيد
France
No hiv aids no hcv
فن الحياة الناجحة أبونا متى المسكين
Mobile Computing IEEE 2014 Projects
Byzantium
數位時代的直接民主可能
INTERNET I EINES 2.0 PER FACILITAR LA TASCA DE COMANDAMENT Sessió 2
Cenário Botafogo, Lançamento Mozak, Apartamentos no Rio, 2 quartos em Botafog...
Michel Foucault - Discipline and Punish
IoMT - Technological Environment of Personalized Medicine and New Era of Heal...
1 1 clues and sources
Ad

Similar to MVCもやもや話 (20)

PDF
iOSハンズオントレーニング observer編 (delegate,notification,KVO)
PDF
I phoneアプリ入門 第3回
PDF
Beginning iPhone Vol2
PDF
iOS アプリのメンテナンス性を高めるための基本的な考え方
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
PDF
Storyboard
PDF
I phoneアプリ入門 第5回
PDF
090821 Ruby Sapporo Night Ruby Cocoa
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PPTX
MVVM入門
PDF
flasherがはじめてiOS開発をしてみて
PDF
I phoneアプリ入門 第4回
PPTX
20130316 mix cpp-yuo
PDF
iPhone UI勉強会資料
PDF
Cocoa Pro5
PPTX
2012 05-19第44回cocoa勉強会発表資料
KEY
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
PPTX
デザインパターン
PPTX
関数型言語&形式的手法セミナー(3)
iOSハンズオントレーニング observer編 (delegate,notification,KVO)
I phoneアプリ入門 第3回
Beginning iPhone Vol2
iOS アプリのメンテナンス性を高めるための基本的な考え方
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
Storyboard
I phoneアプリ入門 第5回
090821 Ruby Sapporo Night Ruby Cocoa
iPhoneアプリ開発の歩き方〜Swift編〜
MVVM入門
flasherがはじめてiOS開発をしてみて
I phoneアプリ入門 第4回
20130316 mix cpp-yuo
iPhone UI勉強会資料
Cocoa Pro5
2012 05-19第44回cocoa勉強会発表資料
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
デザインパターン
関数型言語&形式的手法セミナー(3)

More from Tetsuya Kaneuchi (7)

PDF
いま OS X アプリがアツい
PDF
いまさら NSArray
PDF
Dependency Injection FAQ
PDF
ワタシはSingletonがキライだ
PDF
Core Animation と View
PDF
Core Data の概要と NSIncrementalStore
KEY
WebViewでエラーページを表示する話
いま OS X アプリがアツい
いまさら NSArray
Dependency Injection FAQ
ワタシはSingletonがキライだ
Core Animation と View
Core Data の概要と NSIncrementalStore
WebViewでエラーページを表示する話

MVCもやもや話

Editor's Notes