信息系统的快速开发(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就支持了新的控件的解析。