设计哲学问题:
第3点中问题的性质表明收集的实例应该作为抽象基础,并且有两个不同的派生类具有不同的内部逻辑。不幸的是,这表明应该在每个模式开关处完全重新生成整个对象集合,浪费时钟周期。
是否有人有任何关于在基础的不同实现之间传输缓存数据的简洁模式的示例?我考虑了一个重载的构造函数,它接受了基类的一个实例,但是这看起来非常可怕。也许人们不同意并且喜欢这种风格,在这种情况下我会考虑解决问题。
编辑#1:
对这个问题的具体细节作了一些澄清;我猜想我原来的问题可能很模糊......
例如,让控件附加的绑定属性为List<BaseClass> ControllerClass.Items
。
让控件询问的属性完成其工作
double BaseClass.NumericProperty
IEnumerable<Thing> BaseClass.AggregateProperty
让{至少}两个不同的BaseClass
子类称为DerivedClass1
和DerivedClass2
。当控件切换模式时,意图是ControllerClass.Items
将表示执行适当内部逻辑以暴露这些属性的项目列表。
我建议在模式开关内部,即设置Controller.Mode = NewMode
,控制器将通过执行类似DerivedClass2
的操作来创建一组新的_list_internal[i] = new DerivedClass2(_list_internal[i])
,其中_list_internal当前包含一组DerivedClass1
,然后引发事件(如INotifyPropertyChanged或其他)以通知控件。 DerivedClass1
和DerivedClass2
的构造函数都将BaseClass
作为参数,将其分解以检索两者共有的数据。
我的问题是,这是一种公认的模式;如果不是,为什么不,以及有哪些替代方案,请记住效率以及每次UI做任何事情时都不要丢弃数据的需要。
答案 0 :(得分:2)
我同意迈克曼的观点,这个问题有点模糊,但据我所知,为了在切换模式时获得最佳性能,你必须接受稍微高一点的启动危机:
以下是no-nos: