設計理念問題之間進行切換:模式的行爲的離散模式
- 假設我有繪製的對象的集合的特性的曲線圖的用戶控件。
- 該控件放置在具有長壽命控制器類的窗體上,該類暴露要繪製的對象集合。
- 該窗體還包含一個控件,可以在「模式」或不同的繪圖樣式之間切換。不同模式之間從使用中揭示其公共屬性的對象的邏輯是不同的,但控件並不關心這一點。
- 將數據初始緩存到對象實例相當費力,並導致顯示控件的某些功能出現性能問題。
- 儘管具有不同的邏輯,該對象實例表示同一組的建模變量/事物(但是你喜歡想象它們)之前和模式改變
問題的中點處的性質3表明,後所收集的實例應該被視爲抽象的基礎,並且存在具有不同內部邏輯的兩個不同的派生類。不幸的是,這表明應該在每個模式開關中完全重新生成整個對象集合,浪費時鐘週期。
有沒有人有任何一個簡單模式的基地不同實施之間傳輸緩存數據的例子?我認爲一個重載的構造函數需要一個基類的實例,但這聽起來非常可怕。也許人們不同意和喜歡這種風格,在這種情況下,我會考慮解決這個問題。
編輯#1:
一些澄清這個問題的具體情況;我猜想我的原始問題可能很模糊......
例如,讓控件附加的綁定屬性爲List<BaseClass> ControllerClass.Items
。
讓該控制詢問辦性質的工作是一些類似
double BaseClass.NumericProperty
IEnumerable<Thing> BaseClass.AggregateProperty
讓我們有(至少)的BaseClass
兩個不同的子類稱爲DerivedClass1
和DerivedClass2
。當控制切換模式時,意圖是ControllerClass.Items
將表示執行適當的內部邏輯以公開這些屬性的項目的列表。
我建議在內部模式開關,即設定Controller.Mode = NewMode
,控制器會通過執行類似_list_internal[i] = new DerivedClass2(_list_internal[i])
目前在那裏_list_internal包含一組DerivedClass1
S創建一套新的DerivedClass2
,然後引發一個事件(像INotifyPropertyChanged的或其他)通知控制。 DerivedClass1
和DerivedClass2
的構造函數都以BaseClass
作爲參數,將其細分爲檢索兩者共有的數據。
我的問題是,這是一個公認的模式;如果沒有,爲什麼不,以及有什麼替代方案,牢記效率和每次UI執行任何操作時不要丟棄數據的需要。
我在跟着你,關於你的對象是如何構成的小麻煩。代碼示例可能有所幫助。 – mikemanne 2010-09-27 18:22:03