プロパティ変更イベントを孫から親に伝播する適切な方法を探しています。何らかのツリー構造があり、そのリーフの 1 つでプロパティが変更されたときに、このツリーのルートに通知する必要があるとします。1つの方法は、プロパティ変更リスナーをノードからその子に追加し、次にイベントを先行イベントに再起動することです。もう 1 つの方法は、階層に関係なく、ルートをそのすべての子のプロパティ変更イベントにサブスクライブさせることです。問題は、それを適切に行う方法です。そのためのパターンはありますか?
2 に答える
私のプロジェクトの 1 つで、それを行うためのフレームワークを開発しました。最後に、ネストされた構造のプロパティを明示的にサブスクライブし、イベントの再起動のようなものを持たないように決定しました。これはかなり面倒だったでしょう。
私たちのソリューションは、ツリーのような構造で構成されるマップ ベースのモデルとして機能します。ツリーのどこにでもリスナーを登録できます。使いやすくするために、ツリー構造を pojo の背後に隠すプロキシ シェルにラップしました (モデルの構築時にツリー構造が構築されます)。
もちろん、私たちが望んでいたことをすでに実行できるフレームワークを探しましたが、何もありませんでした。既存のすべてのフレームワークは、フラット pojo のみを扱いました。大変な作業でしたが、今ではとても満足しています。
イベントを伝播する必要がある頻度と比較して、ツリーを変更する頻度に依存するトレードオフがあると思います。
ツリーの変更が頻繁に行われる場合は、ツリーのすぐ上の親を介して情報を戻すようにします。必要なセットアップは、各ノードの親ポインターだけです。それはまた非常に簡単です。
ツリーの変更が比較的まれで、通知プロセスのパフォーマンスが重要な場合は、ルートと各リーフの間に直接のリスナー関係を設定することをお勧めします。