机房收费系统之——视图

机房收费系统的个人重构版已经进行差不多一半多了,没有太大的磕磕绊绊,所以总感觉自己是不是哪个地方理解的还是不到位,也所以一直写不出经过自己理解后的总结博客,某一天的下午在五楼无意中听到师姐给徒弟验收机房,就多听了几句,这才发现自己一直过得太“安逸”了,就像米老师说的,人不能过得太安逸,否则会出问题的,真的是这样,废话不多说了,下面简单介绍下机房中引入的视图。

初次接触视图,是在自考的数据库系统原理,那时候只是单纯的想,单纯的理解,直到如今派上用场,才切切实实的感受到它的好以及便捷之处。

视图:从若干基本表或其它视图构造出来的表。大白话说,就是从几张我们需要的数据表中挑出我们需要的字段重新组成一张“表”以供我们查询使用。

在重构中,比如查询金额收取情况,这里涉及到两个表,一是充值表,而是学生信息表(因为要反应该卡是否结账),按照原来的思维,我可能会一个个的去查询我想要的,这里就有一个问题:大量的代码重复,怎么办?上网看看后才发现“视图”的存在。

首先,视图的创建,有两种方式:

1·相应的数据库下右击视图,按照要求来就可以,不太难,所以不再展示具体流程。

2·用“CREATE VIEW"语句实现。

create view V_student (cardNo,cancelDate,cancelTime,cancelMoney,head,isCheck)
as select cancel_info.cardNo,cancelDate,cancelTime,cancelMoney,cancel_info.head,isCheck
from Cancel_Info ,Student_Info 
where cancel_info.cardNo =student_info.cardNo 
两种方式均可,只是第二种方式可以顺便回顾一下代码语句。

其次,在重构中具体应用。

  '用于查询金额返还记录
    Public Function collectMoneyRecord(enRecharge As RechargeEntity) As Object Implements IRecharge.collectMoneyRecord
        Dim sql As String
        Dim table As DataTable
        'Dim mylist As List(Of RechargeEntity, StudentEntity)
        Dim sqlParams() As SqlParameter = {New SqlParameter("@startDate", enRecharge.startDate), New SqlParameter("@endDate", enRecharge.endDate)}
        'V_CollectMoney就是我们建立视图的名字,其它过程和正常查询类似。
        sql = "select * from V_CollectMoney where rechargeDate between @startDate and @endDate"
        table = sqlhelper.GetDataTable(sql, CommandType.Text, sqlParams)
        'mylist = ModuleEntity.converToList(Of RechargeEntity, StudentEntity)(table)
        Return table
    End Function

这样,简单的查询工作完成了,可是我又出现了一个问题,没有解决。 目前是把相应的代码暂且注释了。

问题:我们都知道,在重构中,是不允许返回DataTable的,原因是向用户暴露了数据库信息,可是当我返回泛型集合时,问题又来了,大家都知道,实体和数据库中表都是一一对应的,那现在我查询的不是表,是视图,那那个集合反应的实体该怎么办?加入两个实体(RechargeEntity,StudentEntity)吗?我试过了,不可以,那要重新建立一个新的实体吗?如果这样,问题可以解决,可是这个实体不是和RechargeEntity,StudentEntity重复了吗?所以,我一直没有找着更好的解决方案,还望同胞们指点迷津。(这篇博客会持续更新)



你可能感兴趣的:(重构,视图)