首页 > 开发 > 综合 > 正文

信息系统的快速开发(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就支持了新的控件的解析。
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表