i osアプリのmvcモデル

13
iOSアプリのMVCモデル 1373日水曜日

Upload: godbird

Post on 13-Jun-2015

1.742 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: I osアプリのmvcモデル

iOSアプリのMVCモデル

13年7月3日水曜日

Page 2: I osアプリのmvcモデル

MVCとは

• Model - Viewを構成する情報を保持する

• View - Modelのデータを表示する- ユーザから操作を受ける

• Controller- Modelに情報の更新を命令する- ViewにModelの情報を送り、Viewを通じてユーザからの操作を受ける

✦プログラムを以下三つのカテゴリに分けてクラス設計するデザインパターン

13年7月3日水曜日

Page 3: I osアプリのmvcモデル

iOSアプリ上のMVC図

テキストテキスト④

1. ユーザの操作をViewからControllerが受け取る2. ControllerがModelに渡す3. Modelで処理を行って結果をControllerに返す4. Controllerが処理結果をViewに表示

① ②

13年7月3日水曜日

Page 4: I osアプリのmvcモデル

どんなメリットがある?

13年7月3日水曜日

Page 5: I osアプリのmvcモデル

メリット• 表示ロジック(View)と計算やデータ取得処理(Model)を分離させる事で、各ロジックの再利用性が高まる。

• クラスを処理系統で分割する事でソースの可読性が高まる(見やすい)

• etc...

13年7月3日水曜日

Page 6: I osアプリのmvcモデル

入門書にありがちなパターン

13年7月3日水曜日

Page 7: I osアプリのmvcモデル

すべての処理がViewControllerに書かれている※ 画面ごとに全く異なるデータを扱うならありですが、業務ではちょっと・・・

13年7月3日水曜日

Page 8: I osアプリのmvcモデル

では具体的にどう書くか

13年7月3日水曜日

Page 9: I osアプリのmvcモデル

Model例JSONやXMLなどの構造化されたデータを扱う場合、Controllerがデータを扱い易いように設計する。

- 情報取得のインターフェースの作成

- Entityクラスの作成

13年7月3日水曜日

Page 10: I osアプリのmvcモデル

情報取得のインターフェースの作成

• Controllerからの処理命令を簡単にするため、インタフェースとしての情報更新メソッド、情報返却メソッドを作成する。

• ローカルの情報へアクセスする処理や、HTTPクライアントでリモートから情報を取得するような実装

13年7月3日水曜日

Page 11: I osアプリのmvcモデル

Entityクラスによる情報管理• こんなJSONがあった場合

[ { "id" : "1FZ3P4ACUWBBC-2010061010321", "created_at" : "Thu Jun 10 01:32:13 +0000 2010", "text" : "つぶやきの本文", "user" : { "id" : "1FZ3P4ACUWBB", "screen_name" : "Becky", "profile_image_url" : "http://profile.img.xxxxxx.jpg", "url" : "http://ssteaete/show_friend.pl?uid=1FZ3P4ACUWBB" }, "reply_count" : "3", "favorite_count" : "5", "favorited" : true }, ・・・]

13年7月3日水曜日

Page 12: I osアプリのmvcモデル

ベタなNSArrayで管理せずに専用のDictionaryオブジェクトクラスを作る

#import <Foundation/Foundation.h>

@interface SAMUserEntity : NSObject

@property (nonatomic, strong) NSString *profileImageURL;@property (nonatomic, strong) NSString *URL;@property (nonatomic, strong) NSString *userID;@property (nonatomic, strong) NSString *screenName;

+(MixiUserEntity *)userEntitiWithDict:(NSDictionary *)dict;

@end

@interface SAMVoiceEntity : NSObject

@property (nonatomic, strong) NSString *voiceID;@property (nonatomic, strong) NSString *createdAt;@property (nonatomic, strong) NSString *text;@property (nonatomic, assign) NSInteger replyCount;@property (nonatomic, assign) NSInteger favoriteCount;@property (nonatomic, assign) BOOL favorited;@property (nonatomic, strong) SAMUserEntity *userEntity;

+(MixiVoiceEntity *)voiceEntitiWithDict:(NSDictionary *)dict;

@end

13年7月3日水曜日

Page 13: I osアプリのmvcモデル

すいません力尽きました。。。

13年7月3日水曜日