【机房重构】——查看上机记录、充值记录+三层+存储过程+模板方法

来源:互联网 发布:ctr csm数据区别 编辑:程序博客网 时间:2024/05/21 11:07

模板方法

        定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

        即:重复度高的窗体,可以用模板方法,比如组合查询。少数的不同之处在父类中定义虚方法,在子类中重写。

分析

        一般用户中,充值记录,和上机记录除了查询的表不一样,其它一模一样,所以考虑用模板方法,这样可以达到事半功倍的效果。
        

详细步骤及代码

        父类:新建普通Windows窗体:


U层:
'**********************************************'说明:U层'计算机名称:ZHAOHAN'创建日期:2015/4/24 16:13:58'作者:赵寒'版本号:V2.00'**********************************************Public Class frmQueryParent    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnchk.Click        Dim e_card As New ChargeEntity.EComQueryParent        Dim b_queryinfo As New ChargeBLL.QueryBLL        e_card.CardNo = txtcardno.Text        e_card.GetTable = GetTable()        If b_queryinfo.queryInfo(e_card) Is Nothing Then            MsgBox("没有记录,请重新设置查询条件", vbOKOnly, vbExclamation)            DataGridView1.DataSource = Nothing        Else            DataGridView1.DataSource = b_queryinfo.queryInfo(e_card)        End If    End Sub    '定义虚方法    Protected Overridable Function GetTable() As String        Return ""    End Function   End Class

B层:
'**********************************************'说明:B层'计算机名称:ZHAOHAN'创建日期:2015/5/3 11:01:32'作者:赵寒'版本号:V2.00'**********************************************Public Class QueryBLL    Public Function queryInfo(ByVal cardno As ChargeEntity.EComQueryParent) As DataTable        Dim d_query As New ChargeDAL.sqlPQuery        Dim e_query As New ChargeEntity.EComQueryParent        Dim table As New DataTable        table = d_query.GroupQuery(cardno)        Return table    End FunctionEnd Class

D层:
'**********************************************'说明:D层'计算机名称:ZHAOHAN'创建日期:2015/5/3 10:24:35'作者:赵寒'版本号:V2.00'**********************************************Imports System.Data.SqlClientImports IDALPublic Class sqlPQuery    Public Function GroupQuery(ByVal info As ChargeEntity.EComQueryParent) As DataTable        Dim strSql As String = "PROC_QueryLR " '连接存储过程        Dim sql As New SqlHelper        Dim sqlparams As SqlParameter() = {            New SqlParameter("@datatable", info.GetTable),'存储过程赋参值            New SqlParameter("@cardno", info.CardNo)        }        Return sql.ExecSelect(strSql, CommandType.StoredProcedure, sqlparams)    End FunctionEnd Class

实体层:
 <pre name="code" class="vb">Private e_gettable As String
    Public Property GetTable As String'用于存表名        Get            Return e_gettable        End Get        Set(value As String)            e_gettable = value        End Set    End Property       Private e_cardno As String’用于存卡号    Public Property CardNo As String        Get            Return e_cardno        End Get        Set(value As String)            e_cardno = value        End Set    End Property


存储过程:
CREATE PROCEDURE PROC_QueryLR@datatable  varchar(20),@cardno varchar(10)AS declare @tempSql varchar(500)beginSET @tempSql='SELECT * FROM '+@datatable+' where CardNo ='+@cardno  EXECUTE(@tempSql) end

子类:
先建立继承窗体


学生查看充值记录样图:


因为充值记录查询和上机记录查询,仅查询表不同,所以除了获取表名需要重写外,其它都不用再写。so子窗体只需要写这一点点代码。查询上机记录同上。
'**********************************************'说明:U充值记录查询子窗体'计算机名称:ZHAOHAN'创建日期:2015/4/24 16:13:58'作者:赵寒'版本号:V2.00'**********************************************Public Class frmchkRecharge    '重获表名    Protected Overrides Function GetTable() As String        Dim tabale As New ChargeEntity.EComQueryParent        tabale.GetTable = "ReCharge_Info"        Return tabale.GetTable    End FunctionEnd Class

总结:

       这样,通过模板方法,就有了事半功倍的效果,设计模式真的好强大。







1 0