DBForm的设计来源以及主要构想

DBForm 的设计来源以及主要构想

?

DBForm 的设计思想来源于我最近作的学生信息管理系统的要求,整个信息系统要求的查询信息比较多,而且大多是模糊查找(贷款,奖学金,勤工助学,考试情况,个人情况等等)。以贷款的查询来举例,主要包括了学生学号,姓名,班级,年级,所属学院等个人基本情况和家庭收入状况,所在地区,学习成绩等级等个人信息扩展情况以及贷款类别,贷款时间,贷款金额等贷款方面的具体信息,数据量众多,编写用于查询的 sql 语句十分麻烦,况且将要完成的模块比较多,每个模块的查询信息却是大体相同,如果每一个模块都单独写查询语句,工作量真得很大

?

仔细分析了各个模块的功能之后,我们发现模块间查询的界面,主要操作大体相似,所不同的,主要是用于查询的字段和窗体控件名等信息,于是我们开始了整个代码的提炼工作,提出了基本的 DBForm 构想

:根据遍历窗体中的控件组,提取出要查询的数据库字段以及用户输入的数据

WinForm 窗体中,有一个非常好的 Tag 属性,可以非常方便的保存我们所需要的数据

WebForm 窗体中,很遗憾,没有 Tag 属性,我们就自己继承了类,添加了 Tag 属性,满足我们 DBForm 中队数据库子端的添加要求

?

查询不仅仅包括字段名,还包括具体需要查询的操作(如 TextBox 控件中的 tag 属性我们便定义为 数据库字段 _ 操作符,例子: studentID_LIKE ,直观,也很形象,并且 LIKE 操作符可以在运行期间动态更改成为 ”=” 等操作符,实现精确匹配)

?

整个 DBForm 的架构中,要求能够有足够的支持弹性,当前的要求是希望能够同时支持好 WinForm 和 WebForm ,我们便采用了窗体数据的抓取和数据库相关 Sql 语句的生成相分离的方法,尽可能的增加整个系统开发的弹性,中间,采用 FormInfoEntity 类进行窗体数据的封装,传递

FormInfoEntity 类中主要包含了 FormInfoList,JoinInfoList ,其中 FormInfoList 中主要保存了提取出来的数据库字段以及对应得用户输入信息,字段的类型(数值还是字符串),以及操作符号等等。 JoinInfoList 主要是要查询的表的连接信息。

?

在整个 DBForm 的编写中,我发现,整个系统的架构不仅仅使用与查询的情况,在修该,添加,删除的时候,也有很大的用处,只要提取出来了相关窗体的信息, Sql 语句的生成是一件很轻松的工作,于是就给 DBForm 扩展上了修改数据库的功能,整个工作也就是添加了相关的 Sql 生成类和窗体信息解析类(用于修改的窗体信息和用于查询的窗体信息描述不同)

?

整个 DBForm 的构架比较有扩展性,能够满足今后多种数据来源的要求,比如说 InfoPath 中的 xml 文件,来自 WebService 中的相关查询等等。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus