信息系統的快速開發(3)數據信息的提取
2024-07-21 02:19:12
供稿:網友
本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。為了保持整個系統有足夠的擴展和足夠的彈性(能夠滿足災webform和winform中的使用,以及其他數據庫更新的來源,比如說office 2003中infopath,以及webservice等等),我將整個dbform的構架拆分為forminfo類和sqlbuilder兩個基類,下面分別描述forminfo類和sqlbuilder類的作用以及申明
forminfo主要負責整個數據庫field信息的抓取,主要包括了以下兩個方法:
/// 添加將要進行遍歷的容器、
public virtual void appendcontainer(object acontainer)
/// 添加單個控件
public virtual void appendcontrol(object acontrol)
/// 清除先前已經配置好的form信息
public void clearforminfo()
主要提供了兩個虛方法,一個公開的clearforminfo方法,從方法名稱上面的含義大家看得很清楚了,整個forminfo可以根據容器和單獨的控件進行添加,在這里,我有必要說明一下我的dbform架構中針對winform和webform的擴展,因為下面的winforminfo類和webforminfo類分別繼承自forminfo,實現winform和webform的信息提取
再winforminfo和webforminfo中,主要是一個針對container的循環,以及通過重寫appendcontainer實現
/// 添加將要進行遍歷的容器
public override void appendcontainer(object acontainer)
{
system.web.ui.control container = (system.web.ui.control)acontainer;
foreach(control acontrol in container.controls)
{
this.doappendcontrol(acontrol);
}
}
在下面的webqueryform和webmodifyform中,就是實現具體的form信息提取了。為什么要用這么多類的繼承呢?我覺得這樣的視線,主要有以下幾點好處
1. forminfo類主要提供最公開的接口,以及一些基礎的方法(提供了一個protected的方法,用于將分析出的form信息填充入forminfoentity中(窗體信息的描述類)
2. winforminfo和webforminfo類主要是把容器object轉換成為具體的wincontrl和webcontrol,并且調用相應的控件信息解析器,實現數據的提取。
3. 接下來的modifyforminfo和queryforminfo主要就提供了控件的信息解析器具體實現,根據具體的控件和具體的任務(modify呢還是query)分別解析出控件的信息,比如說queryforminfo中需要加入相關操作符號的信息(like,=等等)
下面是具體控件的添加操作
private void doappendcontrol(system.web.ui.control acontrol)
{
if (acontrol is smisnet.webcontrol.smisdropdown)
{
this.doappenddropdownlist(acontrol as smisnet.webcontrol.smisdropdown);
}
else if (acontrol is system.web.ui.webcontrols.textbox)
{
this.doappendtextbox(acontrol as smisnet.webcontrol.smistextbox);
}
else if (acontrol is system.web.ui.webcontrols.listbox)
{
this.doappendlistbox((system.web.ui.webcontrols.listbox)acontrol);
}
}
其實這部分代碼寫得并不算優美,包括doappenddropdownlist等方法都寫成了虛方法,有不少代碼的臭味到。其實不應該這樣的,只是因為我們現在的工作比較簡單(只有這三種窗體,不過我想包括了大多數信息系統開發的情況)如果您使用了其他的控件,可以考慮修改acontrol is xxx,然后天加上自己的控件的處理方法,forminfo就支持了新的控件的解析。