系統(tǒng)總框架設(shè)計(jì)思想
申明:僅針對(duì)chis5.0系統(tǒng)[2001-9-1]或最新的日期版本
本手冊(cè)僅限于程序員使用
北京眾邦慧智計(jì)算機(jī)系統(tǒng)集成公司保留最終解釋權(quán)利
未取得所有者許可,任何人或團(tuán)體不得以任何形式傳播
目錄:
系統(tǒng)基類組成
用戶管理及驗(yàn)證
報(bào)表生成器設(shè)計(jì)原理
Data層與Logic層的分層思想
系統(tǒng)基類組成:
Unit_global_varrant.pas 系統(tǒng)全局變量
Unit_RootMainForm.pas 系統(tǒng)主窗口基類
Unit_frmMainBase.pas 系統(tǒng)主窗口
ChildForm.pas 系統(tǒng)子窗口基類
ChildPrintForm.pas 系統(tǒng)普通打印子窗口
ChildPrintFormCube.pas 系統(tǒng)交叉表打印子窗口
一 Unit_global_varrant.pas 系統(tǒng)全局變量
functionSelectMessageBox(Text:string;CaptionNum:integer;Flags:integer):Integer
MessageBox的取代
Function _AddAllFields(DestClientDataSet: TClientDataSet):Boolean;
動(dòng)態(tài)把數(shù)據(jù)集中的所有字段建立成字段對(duì)象
procedure ShowLineedt(stgReport:TDsnStage;iRepControlsNum:integer) ;
允許控件可編輯
procedure HideLineedt(stgReport:TDsnStage;iRepControlsNum:integer) ;
不允許控件可編輯
function ConvertDigit(iDigit:Double): String;
把數(shù)字串轉(zhuǎn)換未大寫(xiě)字符串
function UpperDigit(iDigit:integer):string;
把單個(gè)數(shù)字轉(zhuǎn)換為大寫(xiě)字符串
function DigitDW(iDW:integer):string;
把位數(shù)轉(zhuǎn)換為大寫(xiě)金額位數(shù)
function TrancCurrentNo(iNum: Integer):String;
Function NBGetAdapterAddress(ino:Integer) : String;
獲得第幾張網(wǎng)卡的物理地址
function GetMac:string;
獲得網(wǎng)卡號(hào)
二 Unit_RootMainForm.pas 系統(tǒng)主窗口基類
主要是針對(duì)運(yùn)行期動(dòng)態(tài)設(shè)計(jì)FORM,對(duì)業(yè)務(wù)系統(tǒng)沒(méi)有影響。技術(shù)涉及到Delphi的RTTI和Windows 流技術(shù),如果了解Delphi的RTTI,這部分很好了解。
三 Unit_frmMainBase.pas 系統(tǒng)主窗口
主要是每一個(gè)子系統(tǒng)專門(mén)添加代碼用的框架,沒(méi)有任何技術(shù)與業(yè)務(wù)含量。
四 ChildForm.pas 系統(tǒng)子窗口基類
最主要的方法是
procedure TfrmChildForm.LoadFormStream;
1 把所有的Dcom置上gv_Appserver
2 把與錄入控件關(guān)聯(lián)的Dcom.Connected := True
3 如果保存過(guò)界面,把界面取出放到ChildStage上,ChileStage是一個(gè)可運(yùn)行期設(shè)計(jì)的面板
五 ChildPrintForm.pas 系統(tǒng)普通打印子窗口
這里有幾個(gè)ClientDataSet承攬報(bào)表的恢復(fù)和SQL,參數(shù),數(shù)據(jù)的管理
cdsUpdateSQL, 報(bào)表SQL和格式
cdsSQLParams 報(bào)表參數(shù)
cdsReportDataSet 報(bào)表數(shù)據(jù)
cdsReportStoreProcDataSet 用存儲(chǔ)過(guò)程做成的報(bào)表的數(shù)據(jù)
Function GetReport(iReport_code : Integer):boolean; //取報(bào)表信息
把報(bào)表根據(jù)報(bào)表號(hào)從rt_report_data,rt_reprot_params中取出,放到
cdsUpdateSQL, cdsSQLParams
Function GetData:boolean; //取數(shù)據(jù)
把數(shù)據(jù)放到cdsReportDataSet或cdsReportStoreProcDataSet
Function PrintReport:boolean; //打印
打印報(bào)表
Function PreviewReport:boolean; //打印預(yù)覽
用“大白板”顯示報(bào)表
Procedure InitPrintForm;
為了運(yùn)行期恢復(fù)控件,運(yùn)行期注冊(cè)類
procedure AddReportParams;
無(wú)用,本來(lái)這個(gè)函數(shù)在unit QRExpbld,QRExpbld只為運(yùn)行期設(shè)計(jì)QuickRep表達(dá)式
Procedure RepData_SaveAS;
把報(bào)表數(shù)據(jù)保存到txt文件中
六 ChildPrintFormCube.pas 系統(tǒng)交叉表打印子窗口
由于對(duì)交叉表沒(méi)有使用過(guò),所以無(wú)法描述,請(qǐng)經(jīng)驗(yàn)豐富者填寫(xiě)這部分
用戶管理及驗(yàn)證
由以下數(shù)據(jù)結(jié)構(gòu)構(gòu)成了用戶管理的基礎(chǔ)
xt_subsys 子系統(tǒng)表,每個(gè)子系統(tǒng)的許可證就放在此
xt_group 哪個(gè)子系統(tǒng)有哪些用戶組
xt_func 每個(gè)子系統(tǒng)的每個(gè)用戶組具有什么功能
xt_user_group 每個(gè)子系統(tǒng)的每個(gè)用戶組有哪些用戶
xt_user 每個(gè)子系統(tǒng)的每一個(gè)用戶組的每個(gè)用戶的關(guān)聯(lián)信息,這是整個(gè)用戶管理的核心,重點(diǎn)字段有:subsys_id,user_group,user_name,pass_word,user_mi
xt_user_interface 如果某個(gè)子系統(tǒng)在運(yùn)行期設(shè)計(jì)并保存了某個(gè)Form,就在此表有一條記錄
在主程序中專門(mén)有一個(gè)線程在探測(cè)用戶是否在線,用戶是否達(dá)到了使用的上限。
報(bào)表生成器設(shè)計(jì)原理
1 生成SQL,與Delphi中寫(xiě)SQL一樣,參數(shù)也是:開(kāi)頭
2 運(yùn)行驗(yàn)證SQL,配置參數(shù)類型,初始值,字典編號(hào)應(yīng)該是這個(gè)參數(shù)所對(duì)應(yīng)的TagSQL
3 拖控件,連接數(shù)據(jù)源[選cdsReportDataSet],連接數(shù)據(jù)字段[選cdsReportDataSet中的
字段],或做表達(dá)式計(jì)算,或用系統(tǒng)信息
4 預(yù)覽,保存報(bào)表
5 找到報(bào)表號(hào),在程序中,通過(guò)GetReport(報(bào)表號(hào)),把報(bào)表從數(shù)據(jù)庫(kù)Blob字段中調(diào)出,恢復(fù)到dsnstage,GetData,獲得數(shù)據(jù),打印。
整個(gè)系統(tǒng)最關(guān)鍵的技術(shù)就是DSN,QuickRep,一個(gè)用于運(yùn)行期設(shè)計(jì),一個(gè)用于打印,打印的技術(shù)全部可以參考QuickRep,運(yùn)行器設(shè)計(jì)就是充分利用RTTI和windows的拖動(dòng)消息,這Delphi比較中級(jí)的技術(shù),可以參考一書(shū),有詳細(xì)介紹,核心思想就是流與類信息。
設(shè)計(jì)報(bào)表的難點(diǎn)就是弄清楚幾個(gè)BAND的作用
Data層與Logic層的分層思想
站在層次模型的角度上分為:
業(yè)務(wù)表示層 多種業(yè)務(wù)表示方式
業(yè)務(wù)邏輯層 多種業(yè)務(wù)組合,流程
實(shí)體映射層 對(duì)多個(gè)異構(gòu)數(shù)據(jù)庫(kù)的屏蔽和統(tǒng)一
數(shù)據(jù)服務(wù)層 數(shù)據(jù)視圖,數(shù)據(jù)操作[增刪改,外鍵,存儲(chǔ)過(guò)程,觸發(fā)器,備份,復(fù)制,恢復(fù)]的處理
我們目前欠缺通信安全層
每一層根據(jù)抽象和聚合又可細(xì)分為多個(gè)層次,不可簡(jiǎn)單認(rèn)為兩層或三層或N層,未來(lái)軟件是在層次模型基礎(chǔ)上的分布協(xié)作式計(jì)算的組件環(huán)境,高內(nèi)聚,低耦合,異步連接,對(duì)等計(jì)算是未來(lái)的發(fā)展方向
Data 層專門(mén)放置實(shí)體數(shù)據(jù)集[entry DataSet],Data層是對(duì)數(shù)據(jù)結(jié)構(gòu)的一個(gè)映射,
Logic層專門(mén)放置事務(wù)數(shù)據(jù)集[transaction DataSet],Logic層是對(duì)業(yè)務(wù)規(guī)則的一個(gè)映射,
客戶端Client是站在客戶角度上數(shù)據(jù)與業(yè)務(wù)的一個(gè)結(jié)合表示
Data層專用于表中記錄的增刪改數(shù)據(jù)查詢,與具體業(yè)務(wù)規(guī)格無(wú)關(guān)。
Logic層專用于業(yè)務(wù)流程與業(yè)務(wù)算法,具體寫(xiě)表操作交給Data層,這是設(shè)計(jì)的初衷。
客戶端只管輸入輸出,與Logic無(wú)關(guān)
|
|