Delphi 的ORM框架(即I 0框架)

2022-05-07 18:15:06 字數 2019 閱讀 1142

簡介io是用delphi實現的orm框架([url]有以上描述的大部分優點,同時還有以下特點(演示io自帶的demo:primercross):

1、 支援多種資料庫;

2、 支援自動建立資料庫和更新資料庫結構;

3、 提供整合到ide裡面的資料模型設計器;

4、 支援包括blob、memo等多種資料型別;

5、 支援1對多、多對多資料關係的對映;

6、 提供io物件的快取與共享,生命週期的管理;

7、 提供io物件bin、xml格式的匯入匯出功能;

8、 提供iql查詢語言;

io框架模型介紹

1、 io物件類圖

該類圖顯示出了io是如何設計orm的執行期實體物件的。

io充分利用了delphi的rtti機制,動態生成實體物件的屬性,實現豐富的資料對映功能。不過這種侵入式設計,同時帶來了一定的複雜性。

2、 io物件元資料類圖

元資料記錄的是實體物件與資料庫對映的資訊。分兩類:類的元資料、表的元資料。io框架根據元資料類,實現具體的資料到物件、物件到資料對映功能。

3、 資料庫連線類圖

這裡列出的是io框架資料庫部分的設計類圖。

io框架使用了一套相對比較複雜的設計,目的是使後台支援sql型資料庫(mssql、fb)、遊覽型資料庫(dbisam、access、xml資料庫)。io在這個設計基礎上,提供了兩種擴充支援資料庫的方式,為框架提供了靈活的擴充功能。圖中列出了當前計量使用的ibx控制項擴充類(類名以「tinstantibx」開頭)。

這個靈活通用的設計,同時帶來了效率的問題。不能很好得利用sql型資料庫的大量資料操作查詢、排序等優點。在計量專案中,部分針對io的修改與擴充套件就是為了解決這個效率問題。

4、 匯入匯出類圖

這圖中列的類,提供了實體物件bin、xml格式的匯入匯出功能。

匯入匯出功能,方便應用程式實現資料模板,資料複製等應用功能。

5、 資料遊覽類圖

這部分是io框架為了滿足快速的資料感知控制項開發而設計的。為實體物件的查詢、遊覽提供資料訪問功能(tdataset功能)。

由於資料全部通過訪問實體物件而來,故在訪問資料前必須先建立、初始化好實體物件,在效率與記憶體占用上都比一般的資料集差。

6、 iql類圖

上面orm介紹中提到「查詢語言,是持久化操作中很重要的乙個方面,通過物件導向而非面向資料庫的查詢語言查詢資料,避免程式的sql語句緊密耦合」。不過當前很少使用到iql語言,對這方面的了解也比較少。

7、 異常機制類圖

時序圖

用id獲取io物件

io物件儲存過程

io物件對應資料記錄刪除過程

io框架的優化討論

1、 增加屬性的遲載入(lazy load)功能

增加這個功能的目的是為了提高實體物件例項化速度,減少記憶體使用。小駱在2.0io版本中增加過該功能。

2、 增加屬性物件的快取機制

io實體物件的屬性是乙個真實的物件,乙個實體物件會含有多個屬性物件,屬性物件的建立與釋放次數是很多的。由於屬性物件種模擬較固定,可以考慮增加屬性物件快取池,解決大量的物件建立、釋放帶來的效率慢及記憶體碎片問題。

對檔案I 0緩衝的認識

或許很多初學檔案i o時會認為read 或write 系統呼叫會直接對磁碟中的檔案發起訪問,其實不然,此倆個呼叫只會使使用者空間緩衝區與核心的高速緩衝區之間複製資料。write fd,12345 例如上述操作,當write返回後,在之後的某個時刻核心會將該資料寫入 重新整理至 磁碟 所以系統呼叫其實...

關於c語言中的I 0函式

1.printf與scanf printf 函式是格式化輸出函式,一般用於向標準輸出裝置按規定格式輸出資訊。scanf 函式式格式化的輸入函式。用於向標準輸入裝置按規定格式輸入資訊。printf d a scanf d a 2.getchar與putchar 這兩個函式是專門面向字元i o而設計的一...

如何獲取每個程序的I 0的讀寫位元組數????

如何獲取每個程序的i 0的讀寫位元組數?delphi windows sdk api 1 程序的i o位元組數用什麼可得到呢?暈。2 98下用getprocesstimes而想得到程序使用率,為何就不行呢?從wmi獲取。想要什麼都有,從軟到硬。呵呵呵呵 wmi是個好東東啊!具體一點。select r...