最近用Delphi做了一些程序,有对Delphi中的数据感知有一些疑惑,还请大侠们一起交流一下。比如说InfoPower 4000吧, 其中的界面控件与数据集绑定后,能够感知到数据的变化,从而更新界面的数据。从工作量的方面来讲,可以减少我们很多表示层的工作量。 但是,也有自己的缺点,就是当我们无意间变换了数据时,它们也会发生改变,从而造成了界面的脆弱性。从设计上讲,感知控件是否穿越了表示层与逻辑层的界限。使得我们的测试工作量加大。不知道各位大侠有什么好的解决方案。 还有在dot net中 有没有类似的减少表示层工作量的解决方案。谢谢各位大侠。!
代码重用也不是OO的唯一目标。还有模型的重用,架构的重用,部件的重用。
数据感知部件的主要问题是界面、业务逻辑、数据存储之间结合得太紧密了,降低了软件的灵活性和扩展性。所以其不适合比较大型和复杂的系统。当然对于一些小型系统或原型系统还是合适的。要根据面临的问题选择合适的工具。
public interface IObserver
{
ISubject Subject
{
set;
}
}
和public interface ISubject
{
}之后定义一个实现ISubject的类,实现ISubject接口。包含数据发生变化的代理与事件,
public class MYSubject : Component,ISubject
{
#region Delagate and Event Declarations
public delegate void DataSetChangedEventHandler(object sender, EventArgs e);
public virtual event DataSetChangedEventHandler DataSetDataChanged;#endregionpublic void datachange()
{
DataSetDataChanged(this, EventArgs.Empty);
}
} 之后在数据改变时调用datachange(),而在所有引用该数据的地方实现IObserver接口,并加入DataSetDataChanged处理程序。
这也就是观察者模式,将多个视图统一起来,数据发生改变时,不用再一一通知,而通过观察者自己去发现。