最近用Delphi做了一些程序,有对Delphi中的数据感知有一些疑惑,还请大侠们一起交流一下。比如说InfoPower 4000吧, 其中的界面控件与数据集绑定后,能够感知到数据的变化,从而更新界面的数据。从工作量的方面来讲,可以减少我们很多表示层的工作量。 但是,也有自己的缺点,就是当我们无意间变换了数据时,它们也会发生改变,从而造成了界面的脆弱性。从设计上讲,感知控件是否穿越了表示层与逻辑层的界限。使得我们的测试工作量加大。不知道各位大侠有什么好的解决方案。 还有在dot net中 有没有类似的减少表示层工作量的解决方案。谢谢各位大侠。!

解决方案 »

  1.   

    首先减少编程量并不是OO的唯一目标,也不是主要目标,有时甚至不是目标。使用OO的目的是为了要提高软件的质量,提高整个开发周期的开发效率,提高软件的灵活性和可扩展性,降低整个软件生命周期的维护,修改,扩展成本。
    代码重用也不是OO的唯一目标。还有模型的重用,架构的重用,部件的重用。
    数据感知部件的主要问题是界面、业务逻辑、数据存储之间结合得太紧密了,降低了软件的灵活性和扩展性。所以其不适合比较大型和复杂的系统。当然对于一些小型系统或原型系统还是合适的。要根据面临的问题选择合适的工具。
      

  2.   

    从用Delphi开始,几乎没有用过数据感知控件,因为不灵活,不能有效的把各层分开。
      

  3.   

    这要用到设计模式问题,用“观察者模式”即可实现。首先定义两个接口:
    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处理程序。
    这也就是观察者模式,将多个视图统一起来,数据发生改变时,不用再一一通知,而通过观察者自己去发现。
      

  4.   

    .NET的智能客户端范例IssueVision中就是用这样模式进行设计实现的。