我有一個應用程序,它具有數據樹作爲數據包終端。爲了實現MVVM模式,我有一個封裝數據樹的邏輯層。因此邏輯也被安排在一棵樹中。如果輸入處於有效狀態,則應將數據複製到第二個線程,該線程用作最後一個有效狀態的雙緩衝區。因此,一種方法是克隆。使用MVVM實現的WPF應用程序的不可變數據模型
另一種方法是將完整的數據後端實現爲不可變的。如果輸入新內容,這意味着要重建整個數據樹。我的問題是,是否有切實可行的方法來做到這一點?我被困在了必須重新分配數據樹到邏輯層的地步。
**更新 - 一些代碼
我們正在做的是我們用它來運行我們的實驗抽象的硬件設備。因此我們定義了「機箱,序列,卡片,頻道,步驟」等類。那些建立一個樹形結構是這樣的:
Chassis
/ \
Sequence1 Sequence2
/ | \
Card1 Card2 Card3
/ \
Channel1 Channel2
/ \
Step1 Step2
在代碼中,它看起來是這樣的:
public class Chassis{
readonly var List<Sequence> Sequences = new List<Sequence>();
}
public class Sequence{
readonly var List<Card> Cards = new List<Card>();
}
等。當然,每個班級都有更多的屬性,但這些屬性很容易處理。我現在的問題是List是一個可變對象。我可以調用List.Add()並更改它。好吧,有一個ReadOnlyList,但我不確定它是否以正確的方式實現了不變性。正如通過值複製而不是引用,而不僅僅是阻塞通過阻塞設置方法來寫入它。 接下來的問題是序列的數量和步驟可能會有所不同。出於這個原因,我需要列表元素的原子交換。 目前我還沒有更多的代碼,因爲我還在想如果這種方式對我有幫助,並且如果有可能在合理的時間內實現它的話。
對於MVVM應用程序支持不可變模型非常不直觀。我會考慮另一種模式。 –
我遇到了將複雜的不可變模型映射到MVVM的情況,它看起來並不簡單。你到底是怎麼解決這個問題的? –