関数型プログラミングでは、データ モデルは不変です。データ モデルの更新は、データ モデルに関数を適用し、新しいバージョンのデータ モデルを取得することによって行われます。ただし、人々がそのようなデータモデル用の効率的なビューアー/エディターをどのように作成するのか疑問に思っています(より具体的にはClojureで)
簡単な例: 巨大なツリーのビューアを実装したいとします。非機能的な世界では、関数 updateNode(Node, Value) を使用してツリーのコントローラーを作成し、ツリー内の特定のノードが更新されたことをすべてのオブザーバーに通知することができます。ビューア側では、すべてのノードを TreeView ウィジェットに配置し、Node->WidgetNode のマッピングを維持します。ノードが変更されたことが通知されたら、更新が必要なツリー内の対応する NodeWidget を 1 つだけ更新できます。 .
別の Clojure MVC の質問で説明されている解決策では、モデルを ref に保持し、ウォッチャーを追加する方法について説明しています。これにより、モデルの変更の通知を受け取ることができますが、どのノードが更新されたかはまだわからず、ツリー全体をトラバースする必要がありますよね?
頭の中で思いつく最善の方法は、最悪の場合、ルートから変更されたノードへのパス上のすべてのノードを更新することです (これらのノードはすべて異なるため)。
不変データ モデルのビューを更新するための標準的なソリューションは何ですか?