设计理念问题之间进行切换:模式的行为的离散模式
- 假设我有绘制的对象的集合的特性的曲线图的用户控件。
- 该控件放置在具有长寿命控制器类的窗体上,该类暴露要绘制的对象集合。
- 该窗体还包含一个控件,可以在“模式”或不同的绘图样式之间切换。不同模式之间从使用中揭示其公共属性的对象的逻辑是不同的,但控件并不关心这一点。
- 将数据初始缓存到对象实例相当费力,并导致显示控件的某些功能出现性能问题。
- 尽管具有不同的逻辑,该对象实例表示同一组的建模变量/事物(但是你喜欢想象它们)之前和模式改变
问题的中点处的性质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