Download - I osアプリのmvcモデル
iOSアプリのMVCモデル
13年7月3日水曜日
MVCとは
• Model - Viewを構成する情報を保持する
• View - Modelのデータを表示する- ユーザから操作を受ける
• Controller- Modelに情報の更新を命令する- ViewにModelの情報を送り、Viewを通じてユーザからの操作を受ける
✦プログラムを以下三つのカテゴリに分けてクラス設計するデザインパターン
13年7月3日水曜日
iOSアプリ上のMVC図
テキストテキスト④
1. ユーザの操作をViewからControllerが受け取る2. ControllerがModelに渡す3. Modelで処理を行って結果をControllerに返す4. Controllerが処理結果をViewに表示
① ②
③
13年7月3日水曜日
どんなメリットがある?
13年7月3日水曜日
メリット• 表示ロジック(View)と計算やデータ取得処理(Model)を分離させる事で、各ロジックの再利用性が高まる。
• クラスを処理系統で分割する事でソースの可読性が高まる(見やすい)
• etc...
13年7月3日水曜日
入門書にありがちなパターン
13年7月3日水曜日
すべての処理がViewControllerに書かれている※ 画面ごとに全く異なるデータを扱うならありですが、業務ではちょっと・・・
13年7月3日水曜日
では具体的にどう書くか
13年7月3日水曜日
Model例JSONやXMLなどの構造化されたデータを扱う場合、Controllerがデータを扱い易いように設計する。
- 情報取得のインターフェースの作成
- Entityクラスの作成
13年7月3日水曜日
情報取得のインターフェースの作成
• Controllerからの処理命令を簡単にするため、インタフェースとしての情報更新メソッド、情報返却メソッドを作成する。
• ローカルの情報へアクセスする処理や、HTTPクライアントでリモートから情報を取得するような実装
13年7月3日水曜日
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日水曜日
ベタな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日水曜日
すいません力尽きました。。。
13年7月3日水曜日