第一次用EXE+BPL+DLL項目總結


前段時間研究了一下BPL方式的開發,剛好最近有個小項目,於是嘗試了一下,項目已完成。 有一些心得和體會,寫下來與大家分享,請大家提出不足,另外有在研究BPL方面的朋友,有問題可以大家 共同探討,以便進得更快一些。 關於一個項目的總結 ( EXE+BPL+DLL 模式) 以前一直采用一個獨立的EXE文件的方式做項目,當時的感覺就是方便,不用考慮得太多,把所有的業務邏輯功能 做完后,編譯成一個EXE執行文件就OK了,因為一直沒有研究過BPL這種框架的編程,最近研究了一下,感觸很深, 這種模式才是更方便的。而且對於團隊模式更是方便,只要把各Team的BPL拿來就完成了。基於這種思想,最近應 用到一個新的項目上,已初見成效,現對這個項目總結如下:   一、規划   BPL框架編程規划很重要,一個項目要分成N個BPL,每個BPL的作用、分工在分析時必須確定下來,這一點很重要。   本項目分為以下幾種包:   (1)、DBCommon.bpl --> 數據模塊包,包括數據模塊、數據庫讀寫類模塊 (數據訪問層)   (2)、pubComon.bpl --> 公共函數、過程單元,公共變量單元、自定義結構類型單元、自定義類單元   (3)、BaseForm.bpl --> 所有窗體的基類單元、業務邏輯基類窗體單元   在(3)的基礎上,按照不同的業務邏輯,建立不同業務的業務包,例:A.bpl,B.bpl,C.bpl...... (4)、A.bpl --> 業務包1 (5)、b.bpl --> 業務包2 ......根據業務邏輯的分類,建立不同的業務包。  二、設計   包的應用是有先后的,一些基礎包必須首先建立好,以便供其他包在建立時被應用,基礎包在修改后,所有應用該 基礎包的必須重新編譯,而且順序不能搞錯。例: DBCommon.bpl-->BaseForm.bpl-->A.bpl 當DBCommon.bpl修改並 重新編譯后,后面兩個包必須重新編譯,且先編譯BaseForm.bpl,后編譯A>bpl BaseForm.bpl包中有整個項目的基類窗體單元,以及從該基類窗體繼承的業務邏輯基類窗體單元,在基類窗體單元 中將整個項目的風格統一、包括字體,各控件包括第三方控件的樣式、顏色等做到了規范統一,窗體關閉時應該釋放的 內容等。而基類窗體的相關風格、樣式是由主程序EXE在初始化時進行布局,這樣如果想換風格,只要在公共變量單元中 修改相關的內容即可。 ( 注:本項目沒有使用皮膚,只是通過顏色等風格進行控制 )     例1:為了使DevExpress組件的風格與整個項目的風格一致,特別是TcxGrid在選用dxOffice11樣式時的顏色, 因為dxOffice11默認的顏色是采用深藍色的那種,為了使TcxGrid的顏色與整個項目的顏色配套,就必須 調整,包括線的顏色,這個設置在EXE初始化時得到了安排,這樣設計后,整體效果比較理想。     例2:項目中也采用了第三方控件RZ組件,這也是一個很好的三方控件,這個控件也有一個很好的樣式統一控件, 只要控制好就可以與項目的風格融合到一起了。例TrzFrameController、TrzMenuController等,就是為了 統一風格而使用的。設置好這兩個非可視控件的樣式,就可以達到控件所有使用這個風格的控件了。而主 程序只要在初始化時,設置它們的風格就可得到一勞永逸的效果。 三、調用    框架確定了,包功能完成了,余下來就是主EXE載入Bpl運行了。載入包分為動態和靜態兩種方式。根據業務的規 划,三種基礎包DBCommon.bpl,pubComon.bpl,BaseForm.bpl是靜態載入,由主EXE編譯時加入作為必須使用的運行包。其他包由根據業務功能動態加載讀取運行。      動態加載顯示Bpl中窗體的方式分兩種:一種是融合在主EXE窗體的PageControl上,另一種是ShowModal模式。 這兩種方式是可以調整的,只要修改一個數據庫中表中的字段,就可以達到效果而不要修改主EXE,這樣的安排 確實很方便。    以前做獨立EXE程序時,都是通過TActionList手動將所有的功能建好后,再與菜單、按鈕進行綁定(設置Action), 工作量確實很大,本項目中沒有采用TActionList,而是通過一個TtreeView實現了所有的功能,在主EXE運行讀取 權限功能時,一次讀取功能權限表,加載允許使用的權限到TtreeView上,通過定義一個記錄類型,來記錄bpl名、 表單類名及其他內容,並與TtreeView的Data進行處理,當點擊TtreeView的節點時,讀取節點的Data數據,作為 參數來加載指定的Bpl並顯示表單窗體。這種方式減少了數據庫的訪問次數,而且都是動態處理。從這種思想引深, 以后如果擴展了項目的功能,只要把新的包復制到系統的相關路徑下,    主程序就可以自動加載並顯示功能窗體了。唯一要做的只是在數據庫的表中定義好就行了。這樣的框架安排為順利 擴展打下基礎。 在本項目是同時也做了調用DLL中表單的嘗試,並得到成功。顯示DLL中的表單也分兩種方式,一種是融合在 主EXE的pageControl上,另一種是ShowModal模式。這兩種模式都處理好了回車下移的效果。但是這兩種模式的 窗體,在被彈出的窗體所“認識”的方式上差別較大,因為不同於bpl中的表單,可以很方便的操作。對於融合 在主EXE上pageControl上的DLL表單,在關閉表單時,通過向主EXE發送消息的方式,來通知主EXE釋放動態建立 的TabSheet。   四、體會    通過本項目的開發,深入應用了TtreeView節點的data屬性與記錄類型的變量的配合。以前在實際項目中也曾將 其他對象存儲在該Data上,因為Data本身是一個指針類型,因此發掘它的潛力可以得到不錯的收效。    窗體的融合技術的應用在不同的情況下,操作起來還是不一樣的,例普通表單的融合、BPL中表單的融合、DLL表 單的融合,這三種融合在實際業務上差別還是存在的。特別是被彈出窗體“認識”並對其操作,這方面還是需要 技巧的,還好這三種操作方式目前都得到地成功使用。TFrame框架的使用確實給項目帶來不方便,減少了不少 工作量。 TFrame放在Bpl中的應用一般都是動態加載方式的使用,當然其在窗體上的位置是要事先安排好的, 動態建立的TFrame被窗體內的其他控件所識別也是需要花些時間的才能做好。    數據庫訪問通過一個數據庫訪問類來減少冗余的沒有技術含量的代碼,提高了不少效率。 通過本項目的開發,為以后的工作積累了不少的知識點,同時積累了一些自己的庫。對以后的開發效率會帶來 很多幫助。    因為是第一次正式做Bpl結構的項目,還沒有這方面的積累經驗,感覺就是發布的時候還是麻煩,要確定隨項目 一起發布所帶的bpl包,還是准備了20分鍾,才最終搞定。在網上查了下,有網友建議將包合並,這個要到以后 有時間再嘗試一下了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM