私は、ほぼ 1,000 の異なる種類のデータ項目 (ただし、100 未満の異なるデータ構造/クラス) を持つクロスプラットフォームの C++ データ モデルを開発しています。モデルからコントローラーへのメッセージ (つまり、一部のデータ項目が変更されたというコントローラーへの通知) を処理するために、boost:signals2 を使用することを考えています。これは、異なる OS プラットフォーム間で同じままである統一されたオブザーバー パターンを作成するのに役立つと思います。最初の実装は Mac OS / IOS で行われ、その後の UI は .net と unix で開発されました。
質問:
1) データモデルの観測を設定するには、コントローラーはどのタイプのオブジェクトをシグナル2オブジェクト/スロットに接続する必要がありますか? 観察される各データ項目のコントローラーに特定の関数/メソッド/セレクターが必要ですか? これらの関数は、C、C++、または Objective-C/C++ 関数である必要がありますか?
2) シグナルはどのレベルの粒度を持つべきですか? データの各項目は独自のものを持つべきですか? それとも、関連する構造/レコードのモデルの管理は、構造/レコードのタイプごとに単一のシグナルを維持する必要がありますか? たとえば、どのデータ項目が変更されたかについての情報を渡すために、アプリケーションの設定はすべての設定データに対して 1 つのシグナルを持つべきでしょうか?
3) シグナルを送信するプロセス (またはシグナルを受信するスロット) は、SEPARATE THREAD で実行する必要がありますか?
4) Cocoa には Key-Value Observing 用の独自のシステムがあることを理解しています。しかし、そのようなシステムは、モデルのシグナル 2 ベースのオブザーバー パラダイムと組み合わせるのに有利でしょうか? それとも単に冗長なのでしょうか?
アップデート:
実際の signal2 オブジェクト (オブザーバーではない) の「粒度」に関しては、ドキュメントごとに 1 つ、アプリケーション設定用に 1 つ持つことから始めるのが良いと思います。私のドキュメント データには既に「キー」の概念があるため、UI コンポーネントがモデル データの特定の項目に関連付けられている一般的な UI ケースを一般化できる可能性があります。