適用于簡(jiǎn)單MIS系統(tǒng)的控件關(guān)系映射組件設(shè)計(jì)思路分享
MIS系統(tǒng)就是信息管理系統(tǒng),用于信息的收集、傳遞、維護(hù)和使用等等。控件關(guān)系映射(Control Relation Mapping,CRM)是我在2005年研究生一年級(jí)給導(dǎo)師做項(xiàng)目的時(shí)候提出來的一種針對(duì)大表單的快速解決方案(解決方案很多種),其設(shè)計(jì)從UI映射和OR映射借鑒了點(diǎn)思想,加上點(diǎn)自己的體會(huì)設(shè)計(jì)的,不過這個(gè)組件屬于業(yè)余級(jí)別的。
這個(gè)組件的設(shè)計(jì)背景是:給導(dǎo)師做一個(gè)項(xiàng)目(20萬的企業(yè)MIS),MIS系統(tǒng)就是有一個(gè)大表單用于輸入信息,實(shí)現(xiàn)數(shù)據(jù)庫記錄CRUD操作。不過這個(gè)項(xiàng)目表單有點(diǎn)夸張,少的有70~80個(gè)字段,多的有幾百個(gè),最夸張的是一個(gè)同學(xué)設(shè)計(jì)了1000多個(gè)字段的表單,他做好后,很有成就感的給顯了一下。不過,我可以沒有他那么有耐心,從小到大我都是偷懶過來的,因此我就在琢磨怎么省點(diǎn)事。整個(gè)項(xiàng)目有9大模塊,必須采用Delphi開發(fā)(現(xiàn)在忘光了,我原來就沒想學(xué)這玩意,Pascal語言讓我感覺很別扭)。我負(fù)責(zé)框架設(shè)計(jì)和其中一個(gè)模塊??蚣艿脑O(shè)計(jì)采用模塊化支持,集成界面配置、權(quán)限管理、包管理、基本UI操作,由框架加載各個(gè)模塊(BPL庫,類似DOTNET的程序集),根據(jù)需要呈現(xiàn)各個(gè)模塊其中的UI。我負(fù)責(zé)的模塊需要輸入一堆數(shù)據(jù),因此我設(shè)計(jì)了一個(gè)小型的控件關(guān)系映射(由于業(yè)務(wù)簡(jiǎn)單,沒有采用ORM等先進(jìn)技術(shù)),其思想非常簡(jiǎn)單,即利用一個(gè)XML封裝界面的輸入、處理和輸出,XML文件由可視化工具自動(dòng)生成。
CRM概念設(shè)計(jì)圖如下,其思想是利用一個(gè)XML配置文件,實(shí)現(xiàn)界面表單與數(shù)據(jù)庫記錄映射,中心思想是一條映射SQL。映射SQL的參數(shù)來自界面控件、某個(gè)類成員或方法,或者常量;映射SQL執(zhí)行數(shù)據(jù)庫的操作;映射執(zhí)行結(jié)果是控件屬性賦值、控件賦值、成員賦值、數(shù)據(jù)綁定、調(diào)用方法等。通過映射SQL很容易實(shí)現(xiàn):1 進(jìn)入頁面后查詢,執(zhí)行Bind映射SQL,填充DataGrid;2 點(diǎn)擊添加,顯示一個(gè)Panel,隱藏DG Panel,保存后,執(zhí)行Create映射SQL,映射結(jié)果是隱藏添加記錄Panel、顯示DG Panel、執(zhí)行Bind映射SQL;3 Update和Create類似。因此,在我的應(yīng)用中,無論表單如何復(fù)雜,代碼都不會(huì)超過100行。
CRM體系結(jié)構(gòu)圖下:
它由映射配置工具、映射文件、映射配置層、核心層和窗體層組成,相當(dāng)于關(guān)系數(shù)據(jù)庫與用戶界面的適配器,為雙方的數(shù)據(jù)交互提供橋梁作用。當(dāng)用戶輸入信息提交系統(tǒng)后,(1)核心層利用窗體層提供的功能從用戶界面獲取用戶數(shù)據(jù);(2)核心層利用映射配置層讀取映射配置并解析;(3)核心層利用數(shù)據(jù)訪問層訪問關(guān)系數(shù)據(jù)庫;(4)如果本次訪問需要返回結(jié)果,則核心層利用映射配置層讀取配置數(shù)據(jù),然后利用窗體層將返回結(jié)果顯示給用戶。如果用戶僅需從關(guān)系數(shù)據(jù)庫獲取數(shù)據(jù)時(shí),則只需要執(zhí)行上述過程的(2)~(4)步驟。
舉個(gè)非常簡(jiǎn)單的例子(基于.NET,做完Delphi項(xiàng)目后,我移植到DotNET 1.1了):
(1)插入派遣單位表單
(2)利用可視化配置工具生成映射SQL如下
(3)在“保存”按鈕的OnClick事件響應(yīng)函數(shù)編寫一行代碼即可完成該功能:
MappingFactory.ExecuteMapping(this,"HumanDispSolution.SpreadFaculty.Web_DispDepart","InsertDispDepartment")。執(zhí)行結(jié)果就是插入記錄并記錄日志。
在實(shí)際應(yīng)用中表單要比這復(fù)雜多了,這個(gè)小東西幫了我不少忙,在幾個(gè)業(yè)余項(xiàng)目都用它來開發(fā)。這個(gè)小組件,只適用于簡(jiǎn)單的MIS系統(tǒng)快速開發(fā),在DOTNET2005以后微軟開始在DataSource支持綁定控件了,現(xiàn)在CRM.NET有點(diǎn)不入流了,不過還是希望對(duì)一些初學(xué)者有點(diǎn)幫助吧。
【編輯推薦】