私たちのコードベースが成熟するにつれて、私は、メッセージを渡すための情報をパッケージ化する方法として辞書を渡すパターンや、さらに悪いことに、関数の引数を渡すパターンが嫌いになり始めています。文書化されていない文字列リテラルの API を持つ送信関数と受信関数の両方が必要です。
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
thisObject, @"thisKey",
thatObject, @"thatKey",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....
そしてsomeClass
のリスナー
- (void)someClassListener:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
ThisObject *ob1 = [info objectForKey:@"thisKey"];
ThatObject *ob2 = [info objectForKey:@"thatKey"];
}
とはタイプのキーでthisKey
あり、その通知のために、それらのキーのどこかに定数を作成できることを確認する必要がありますが、それでは問題は実際には解決されません。thatKey
ThisObject
ThatObject
そして、15個の引数を必要とする関数があるとしましょう.15個のパラメータを持つ関数を作成するつもりはありません.辞書を渡すだけの方がはるかに簡単ですが(読みにくいですが)、上記と同じ問題があります. .
私はそれらのクラスのヘッダー ファイル (つまり、1 つのヘッダーに 2 つのインターフェイス) でスタブ化された「メッセージ クラス」を作成して遊んでいました。違う。
ヘッダーでパラメータオブジェクトのようなことができれば素晴らしいのですが、それはorなどのようなものだけをtypeDef
サポートしていません.NSObject
int
float
基本的に、機能であろうと通知であろうと、メッセージの送信者とメッセージの受信者の間でより強力な契約を作成しようとしています。