トップ «前の日記(2012-01-23) 最新 次の日記(2012-01-25)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|

2012-01-24 [iOS]MVCのモデルについて

MVCのモデルは、実際の値を持っているデータ構造と、それを抽象的に見せるインタフェースから成り立っていると考えている。ビジネス・ロジックは、このインタフェース部分で実装されると考えていて、このインタフェース部分を私はDocumentというクラスで実装している。

HMDT木下誠さんの著書『iOS開発におけるパターンによるオートマティズム』で、モデルレイヤ設計パターンとして、モデルオブジェクトクラスとモデルマネージャクラスが解説されているが、ほぼ、同様なものと考えられる。

画像の説明

モデルの実装方法が決まったら、それをどうアクセスするかが問題となる。オッティモの小池邦人さんが、MOSADeNで説明されていたサンプルでは、アプリケーションのデリゲートクラスのインスタンス変数として持つ方法。

@interface AppDelegate : NSObject <UIApplicationDelegate> {
	UIWindow		*window;
	MyViewController	*viewController;
	MyDocument		*document;
}
@property (nonatomic, retain) IBOutlet UIWindow			*window;
@property (nonatomic, retain) IBOutlet MyViewController	*viewController;
@property (nonatomic, retain) MyDocument				*document;
@end

こうすれば、アプリケーションのインスタンスを取得すれば、documentインスタンス変数にアクセスできる。

AppDelegate	*appl = nil;
appl = (AppDelegate *)[[UIApplication sharedApplication] delegate];

先ほどの、木下さんの著書では、シングルトンのパターンで実装されていた。

static MyDataManager *_sharedInstance = nil;
+ (MyDataManager *)sharedManager
{
	if (!_sharedInstance) {
		_sharedInstance = [[MyDataManager alloc] init];
	}
	return _sharedInstance;
}

好みの問題だと思われるが、私はデリゲートのインスタンス変数とする実装が好みだ。

_ 関連情報

Carbon視点でiPhone探求(データソースとデリゲートを実装する)
オッティモの小池邦人さんがDocumentの実装について説明しているページです。 iOS開発におけるパターンによるオートマティズム
HMDTの木下誠さんが著書を紹介しているページです。

トップ «前の日記(2012-01-23) 最新 次の日記(2012-01-25)» 編集