信息系統(tǒng)的迅速開發(fā)(3)數(shù)據信息的提取
發(fā)表時間:2023-07-27 來源:明輝站整理相關軟件相關文章人氣:
[摘要]為了保持整個系統(tǒng)有足夠的擴展和足夠的彈性(能夠滿足災WebForm和WinForm中的使用,以及其他數(shù)據庫更新的來源,比如說Office 2003中InfoPath,以及WebService等等),...
為了保持整個系統(tǒng)有足夠的擴展和足夠的彈性(能夠滿足災WebForm和WinForm中的使用,以及其他數(shù)據庫更新的來源,比如說Office 2003中InfoPath,以及WebService等等),我將整個DBForm的構架拆分為FormInfo類和SqlBuilder兩個基類,下面分別描述FormInfo類和SqlBuilder類的作用以及申明
FormInfo主要負責整個數(shù)據庫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,實現(xiàn)WinForm和WebForm的信息提取
再WinFormInfo和WebFormInfo中,主要是一個針對Container的循環(huán),以及通過重寫AppendContainer實現(xiàn)
/// 添加將要進行遍歷的容器
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中,就是實現(xiàn)具體的Form信息提取了。為什么要用這么多類的繼承呢?我覺得這樣的視線,主要有以下幾點好處
1. FormInfo類主要提供最公開的接口,以及一些基礎的方法(提供了一個protected的方法,用于將分析出的Form信息填充入FormInfoEntity中(窗體信息的描述類)
2. WinFormInfo和WebFormInfo類主要是把容器Object轉換成為具體的WinContrl和WebControl,并且調用相應的控件信息解析器,實現(xiàn)數(shù)據的提取。
3. 接下來的ModifyFormInfo和QueryFormInfo主要就提供了控件的信息解析器具體實現(xiàn),根據具體的控件和具體的任務(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);
}
}
其實這部分代碼寫得并不算優(yōu)美,包括DoAppendDropDownList等方法都寫成了虛方法,有不少代碼的臭味到。其實不應該這樣的,只是因為我們現(xiàn)在的工作比較簡單(只有這三種窗體,不過我想包括了大多數(shù)信息系統(tǒng)開發(fā)的情況)如果您使用了其他的控件,可以考慮修改AControl is xxx,然后天加上自己的控件的處理方法,F(xiàn)ormInfo就支持了新的控