基于数据字典的通用查询系统(四)实体类的设计 1
我们分为两个部分对这个模块中的信息进行Class的抽象,一是从数据库结构进行抽像,一中是从查询的构造过程进行抽象。
在列出包含的类之前,有一点需要说明,就是,正如前面分析,我们要对每一个元素都有一个对数据库的表示,和对用户的表示,在这里,我把对数据库的表示统一为属性Exp,对用户的表示统一为Show
一.从数据库结构进行抽像。
1. 表示数据库中的表的类QueryTable
2. 表示数据库中的列的类QueryCol
3. 表示数据库中的连接的类JoinCondition
4. 表示数据类型的枚举ColShowType,就是我们在第二篇中分析的那四种数据类型(数值,日期,字符串,状态位)
5. 表示数据库中状态位的ColStateValue;
6. 为了操作方便,抽像出集合JoinCoditions,ColStateValues;
类图如下:
呵呵,介于园子里大侠比较多的原因,类的代码就不都贴在这里了,这里只把QueryCol的实现简单说一下。
我们前面说了,我们一共有四种数据类型,按照正常,也是最合乎情况的方式,应当对这四种类型抽像出一个统一的结口,然后实现四种对应的类。进行与QueryCol进行结合,但是在这里,为了处理方便,QueryCol采用了冗余设计的方式,即有些类似于C 、C++中的联合,在一些场合下,只用其特定的属性。
一个是用于处理在日期类型下使用的属性Format,因为如前文所说,日期可能是以datetime存储,也可以是以varchar存储,在这种情况下,当用户进行操作后,就有必要有一种方式将进转换成符合数据库中表的列的设计方式的。这时,我们的Format就起了作用。
另外就是处理在状态位时使用的属性ColStateValues属性,它是一个ColStateValue的集合,这样说可能不大好明白,举个列子,比如一个列,state, 当其为0时表示未处理,当其为1时表示已经处理。
那么这个列就有一个ColSateValues的属性,其中第一个元素的Show为”未处理”,Exp为”0”,第二个元素的 Show为”已经处理”,Exp为”1”;
在这里,为 了使以后的查询结果表示直观,我们还要为ColStateValues设计一个GetState的方法,也就是通过一个元素的exp查找这个元素的show的过程。
至于这些附加的信息存在哪,呵呵, 我们在数据库设计时不是有ColStateString吗?在不同的情况下做一下处理就行了。
为了更明白,最有效的方法,贴一下QueryCol的构造函数吧,嘿嘿
啊,ColStateValues也不能忘了,呵呵,代码如下:
这里已经考虑了用字符串等其他非数值信息做状态位的情况。。
各位看官别说看的头大啊,小的文笔有限,只能先写成这个样子了,呵呵。
明天该写最关键部分,查询部分类库的设计了,呵
系列文章连接
三。数据库设计。
四。实体类设计
五。算法实现