11--浅谈VCL的持久化
持久化机制也是许多框架里惯用的词汇了,那时候对这于名词理解很片面。后来渐渐明白了这个机制的意义。回过头来看Delphi,持久化机制就是其最大的特点。最过明显的就是在编码过程中所看到的文件类型,有个pas文件,还有一个dfm文件。pas文件保存的是我们的代码,那么dfm保存的则是我们窗口的属性。也就是说Delphi的集成开发环境中就把可视化的窗体属性按以流的方式保存下来。这就是delphi持久化最为明显的地方了。仅凭这一点,就可以想象得到整个VCL的持久化机制也是相当的强大。
实现持久化机制在VCL有特定的
TPersistent来实现,在持久化的机制中还有一中是以流为主的类像什么
filestream等,这些都是从
TSteam派生下来的,代表了各种不同的媒体。当我们编码来实现持久化机制时一般都采取特定的二进制存储对象的内容里,也有许多用XML的文件方式保存文件。当然持久化的运用起来的话,主要有2个方面,一个是以对象为基础的持久化另一个则是以组件为基础的持久化。
我用Delphi搞过一段时间段额COM编程,现在想想COM其实也是这样的机制,这个方法由微软推出来的。这个COM的架构主要是保存应用程序之间的共享的数据交换机制。COM主要由stream和storage组成的。而storage可以作为有目录的stream。当然最让我熟悉起来的还是java的持久化,这些在与java相关的环节我再去总结吧!今天把这个主题留给Delphi,还是说说VCL中的
TPersistent吧!
我们说过的控件基本都是从TCompoent继承而来,而Componet其实也是从TPersistent继承下来的,因此所有的VCL控件基本上都自动继承了持久化的能力。在TPersistent中核心方法是Assign,该方法指定一个TPersistent或是派生类的内容到另一个派生类之中,这个方法是虚方法,这也是VCL中常有的写法,还有一个方法是GetNamePath,该方法是取得完整继承路径类的名称。DefineProperties该方法可改写持久化类定义的私有变量。AssignTo该方法实际执行对象之间指定的工作。
实际上在VCL持久层的机制上,有三个核心的类:TFiler,TReader,Twriter。并且TFiler类是Treader和Twriter的父类了。TFiler定义了持久化的基本服务接口,其它两个类一个实现从流中读取持久化信息,一个则是写入持久化信息。一个抽象的父类,派生它的两个类一个实现读一个实现写,这也是一个需要细心琢磨的类。
(未完待续.......)