zoukankan      html  css  js  c++  java
  • 强大的DELPHI RTTI–兼谈需要了解多种开发语言

    风焱在《“18般武艺”?》中说到他碰上的被多种语言纠缠的问题。我在回复里说:
     很多语言只要能看懂几分就行了,没必要每一种都精通 
    但是如果只会很少的一两种语言也是不行的。

    因为看了一些关于JAVA的反射技术的应用,忽然想到DELPHI的RTTI也很强,于是试着拿数据集下手,用RTTI来实现它的对象化。用了两个
    晚上时间就搞定了(要不是因为开始时搞错对象–基类用了TObject,其实应该是用TPersistent才对),果然很简单。

    假设有一个ADODataSet控件,连接罗斯文数据库,SQL为:

    select * from Employee

    现在要把它的内容中EmployeeID, FirstName, LastName三个字段显示到ListView里。我通过RTTI实现了一个数据集代理类,使得代码得到大大的简化(这两天争取把结果整理出来另外撰文说明)。其结果大致如下:

    Type
    TPDSEmployee = class( TMProxyDataSet )
    published
    Property EmployeeID : Integer Index 0 Read GetInteger Write SetInteger;
    Property FirstName : String Index 1 Read GetString Write SetString;
    Property LastName : String Index 2 Read GetString Write SetString;
    End;
    ...
    emp := TPDSEmployee.Create( ADODataSet1 );
    While emp.ForEach Do
    With ListView1.Add Do
    Begin
    Caption := IntToStr( emp.EmployeeID );
    SubItems.Add( emp.FirstName );
    SubItems.Add( emp.LastName );
    End;
    emp.Free;
    

    对比传统的实现代码,好处是显而易见的。

    但是当我实现出这个TMProxyDataSet类后,不禁感到痛心疾首,这个我早在三年前就应该想到的。

    三年前DELPHI6刚推出时,我就发现它的SOAP功能是通过DELPHI强大的RTTI来实现的,我为什么当时没有想到去深入研究一下DELPHI的RTTI呢?

    这次要不是因为看到了一些JAVA的资料,我可能还是想不到,所以多了解一些别的语言是很重要的事。特别是最近以来,动态语言越来受到关注,虽然它们在性能上不能跟原生开发相比,但在很多的开发思想上,具有重要的启发意义。

    在做了这个东东以后,我才意识到,DELPHI其实是所有原生开发语言中,动态性最高的,并不比基于虚拟机的JAVA和C#低多少。只是长期在做RAD的开发,没有体会到而已。程序员在RAD下被惯坏了。

    做完这个,我打算下一步再试试用RTTI实现对象的XML持久化(基本上就是抄袭一下DELPHI本身的SOAP实现代码-_-|||)。这个思路应该会比我原先用的XML Data Binding要方便很多,至少不用再去写那个麻烦的XML Schema了。

    BTW:以前没有太关注RTTI,效率恐怕是其中最重要的一个原因,但是现在看来,跟虚拟机语言甚至动态语言相比,DELPHI作为原生应用开发,这点RTTI效率损失其实根本没有想像中那么大的影响。换来开发效率的大大提高还是很值得的。

    BTW:抄了令狐的一段CSS(<pre>)。^O^

    http://blog.csdn.net/diligentcatrich/article/details/5500748

  • 相关阅读:
    使用Oracle PROFILE控制会话空闲时间
    ORACLE sid,pid,spid总结
    总结:基于Oracle Logminer数据同步
    从操作系统rm数据文件后,利用句柄与rman恢复的过程。(已验证)
    SPOJ GCDEX (数论)
    C++类构造函数
    [置顶] 删除:大数据取舍之道读书笔记
    paip.c++ qt 图片处理 检测损坏的图片
    paip.c++ qt 目录遍历以及文件操作
    AJAX最简单的原理以及应用
  • 原文地址:https://www.cnblogs.com/findumars/p/5011877.html
Copyright © 2011-2022 走看看