动态数据模组.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi Databases: Dynamic Datamodules at Runtime 作者:Charles E. Weindorf(Charles.Weindorf@) 翻譯:Justim(justim@.tw) 有個農夫的箴言是這樣說的:「不要試著把十磅的馬鈴薯放進只能裝五磅重的袋子裏。」雖然這是個常識,但當我主持的一個Delphi的project時,甚至在袋子中放超過了十磅重的馬鈴薯。在這個project中,小組的程式設計師必須在多數不同的表單(form)中存取超過 70 個資料表格。使用一個主要的datamodule去管理 70 個表格,此datamodule成為所有表格的交通警察,並且操作這些資料的商業邏輯。但在這種架構中,由於任一個form使用到的資料表的數量大概是2到20個,所以在datamodule中會有許多的query及datasource物件是閒置不用的(這至少值五磅重)。然而,當我們嘗試著將這巨大的datamodule分割成數個較小的datamodule時,發現各個form所用到的資料表都有所不同,而這些排列組合會變得十分的複雜,於是如何整合這些不同datamodule將成為專案發展的一個困難。在試過許多不同的技術後,我發展出了一種架構,這個架構利用一個datamodule來維護所有的資料庫表格,使其可以保有集中管理的優點,但在執行時期又不耗資源的技巧。 下面的文章將描述delphi的程式設計師如何駕馭query及datasource的演進過程: 方法一:在每個Form上都置放TQuery/TDataSource元件(TQuery/TDataSource on all Forms) 自Delphi 1的時代以來,這個方法幾乎是任何delphi的程式設計師都會用的技巧。還有什麼比將query元件放在form上,然後設定datasource的連結更簡單的事?雖然說很方便,但在維持資料庫表格資料的一致性上,這個方式有其弱點了。在一個大型的專案裏,程式設計師無可避免地必需在許多form上放置query元件,當資料庫表格的schema有任何變動時,程式設計師必須修改form上所有相對於這個table的定義,此外,所有相關於這個query的商業邏輯的程式碼也將會四散且重覆出現在個各個form裏。 圖表 1 於是,在Dehpi 2,最主要進步在於… 方法二:將元件置於datamodule中(Components in Datamodule) Datamodule是個很方便可以讓程式設計師集中管理專案中所有的query及datasouce元件的地方,此外,我們也可以將相關的的商業邏輯程式碼置於此處,達到集中管理的目的。在多個form中使用一個單一的datamodule會造成管理上的困難,當使用者在不同的form間切換時,程式設計師必需確保不同form間資料的一致性。雖然單一的datamodule架構可以節省資源及記憶體的耗用,但是程式設計師卻必需撰寫額外的程式碼來確保在每個form中的資料都是正確的。 圖表 2 方法三:多個datamodule架構(Many Instances of Datamodule) 為了確保form及datamodule間資料的一致性,我們可以利用「每個form都擁用自己的datamodule 實體(instance)」的架構(譯注:請讀者看圖三,所謂「自己的datamodule實體」是指每個form生成時,會建立一個私有的datamodule,而這個form中所有用到對資料庫的處理,都是參考到這個私有的datamodule。但就以巨觀的角度來看,這些datamodule其實都是一樣的,這也是為什麼圖三作者會這樣畫的原因,請讀者和方法四做個比較後會比較明白)。而這個架構,可能是個在記憶體使用上最沒有效率的一種方式。如同方法一,商業邏輯的程式碼將會散落而且重覆地出現在不同的instance間,此外,一樣會有不少query及datasource的元件被閒置在datamodule裏,造成記憶體的浪費。這個方法的優點如同方法二,由於其架構在邏輯上還是屬於集中式的,故資料庫的維謢及管理都還算簡單。 圖表 3 方法四:動態的datamodule架構(The Dynamic Datamodule) 我把動態的datamodule架構目標條列於下: 允許每個form的instance搭配自己的datamodule。 能裁切(tailor)datamodule中的dataset使其符合每個form的需求 將商業邏輯的程式碼由form及datamodule中給抽離出來。 圖表 4 那…給我看看程式碼吧! 一如linux使用者所認知的,學習及為你的系統加入新的特色就是使用open source。底下的範例程

文档评论(0)

zhoubingchina + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档