淅淅沥沥,奇怪,冬,北国怎么下起了雨?
路上的行人都这么说,在出宿舍门都囊过,所以显得很平静。
天,有了特殊;冬,有它的别致。我想在旅程续写它的文章。
说起机房重构,别有一番滋味在心头,那些与组合查询相交的日子,写着魅力与波折;回荡其那往昔的峥嵘岁月,不远不近,激扬文字,浪遏飞舟。
好了,言归正传其实之前一直没有偏离,哈哈。
机房收费系统,说起组合查询,就会有种畏惧觉得它比一般的查询复杂。那么我们来看看它到底有多么的不容易:一般业务逻辑+两个面向对象。组合查询的基本窗体,如图:
一般的业务逻辑:当第一个组合关系cmbRelation1.Text为空时,根据第一组条件查询;当第一个组合查询不为空第二个组合关系为空时,第一组和第二组查询条件都不能为空;当第二个组合关系不为空时,默认第一个组合关系不为空,同时三组查询条件不为空。这里需要注意的是调用判断文本框是否为空的方法。
两个面向对象的思想,这里用面向对象来说似乎不太准确,可以简单地这么理解:
一、在学习和程序设计、代码书写中常说要要有封装的思想以便于继承、复用,在窗体的设计中同样也可以实现这样的想法,即今天所说的面向对象之一。
在机房收费系统中,四个窗体设计组合查询,而且基本相同。这样我们可以建立一个父窗体同时将公共的方法封装在父窗体中,然后四个组合查询窗体作为子窗体去继承和重写它就可以省去许多重复的工作,也提高了系统的可维护性。至于如何建父窗体、字窗体以及它们之间的关系,请听下回分解。
二、拼接字符串的面向对象:如果两个组合关系都不为空时,进行组合查询是不是要把多有的字符串都拼接起来,对吧。正常的情况下,我们还需要分组合关系为空有一个字符串拼接语句,第二个组合关系不为空第一个为空有一个字符串拼接语句。那么如果有一种方法可以在第一个或第二个组合关系为空的情况下也能通用两个不为空的拼接语句就省事也提高了可维护性。
在Sql与中新建查询做这么一个尝试select * from T_Line where status='False'与select * from T_Line where status='False' and 1=1查询到的结果是一样的,这告诉了我们一个秘密:当第一个组合关系为空时,我们可以看成两个组合关系不为空,是“与”即“and”的关系,第二三组查询条件的字段与操作符都为1,要输入内容都是“=”;当第二个组合关系为空时类推第三组查询条件。代码的诠释更清晰:
<strong><span style="font-size:18px;"> '当cmbRelation1为空时
If cmbRelation1.Text = "" Then
GroupQueryEntity.Fields2 = "1"
GroupQueryEntity.Operator2 = "="
GroupQueryEntity.Context2 = "1"
GroupQueryEntity.Fields3 = "1"
GroupQueryEntity.OPerator3 = "="
GroupQueryEntity.Context3 = "1"
GroupQueryEntity.Relation1 = "与"
GroupQueryEntity.Relation2 = "与"
End If
'当cmbRelation2为空时
If cmbRelation2.Text = "" Then
GroupQueryEntity.Relation2 = "与"
GroupQueryEntity.Fields3 = "1"
GroupQueryEntity.OPerator3 = "="
GroupQueryEntity.Context3 = "1"
End If</span></strong>
大概的组合查询思路有了,接下来就是如何实现。
机房重构还是做其他的学习,关键的一步需要理清思路。对于组合查询或者说学习,相信大家有更好想法,集思广益,希望大家多多指教!