我有一個對象層次結構,它是使用MVVM模式的WPF應用程序的模型。後代對象需要知道在層次結構的根對象上設置的屬性。該屬性可以隨時更改(不僅在創建層次結構時進行設置)。在這個要求出現之前,孩子沒有理由引用它的父代或根對象。MVVM模型層次結構中的共享值
簡化,簡寫例如:
public class Airplane
public bool IsFlying { get; set}
public ObservableCollection<WingAssembly> WingAssemblies { get; set; }
public class WingAssembly
public void MethodNeedsIsFlyingState() { }
public Flaps Flaps { get; set; }
public class Flaps
public void MethodAlsoNeedsIsFlyingState() { }
兩種模式發生我來解決這個問題:
A)添加一個父(或根)對象引用的孩子。
PRO的:簡單的改變,直接地引用根對象的狀態
CON的:創建一個沒有之前需要一個雙向的對象層次...我不知道下游後果我可能會遇到(更復雜的數據模型?)
B)將IsFlying屬性添加到需要它的後代對象。當根狀態改變時更新後代的狀態。
PRO's:對象層次仍然不需要孩子知道父母/根。
CON's:隨着模型演變,很容易錯過所需的更新。兒童的IsFlying狀態可以被根對象以外的人改變。更復雜。
我傾向於在每個後代中引用對根的引用,但希望看看我是否缺少更優雅的解決方案,或者如果我錯過/低估了該路徑的重要結果。
這對優雅的實施方案A的可能機制父,但並不能幫助我可用的選項之間進行選擇。感謝您的輸入。 – 2012-01-30 02:26:16