強大的DELPHI RTTI–兼談需要瞭解多種開發語言

來源:互聯網
上載者:User
風焱在《“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效率損失其實根本沒有想像中那麼大的影響。換來開發效率的大大提高還是很值得的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.