【機房重構】——檢視上機記錄、充值記錄+三層+儲存過程+模板方法
阿新 • • 發佈:2019-01-06
模板方法
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 即:重複度高的窗體,可以用模板方法,比如組合查詢。少數的不同之處在父類中定義虛方法,在子類中重寫。分析
一般使用者中,充值記錄,和上機記錄除了查詢的表不一樣,其它一模一樣,所以考慮用模板方法,這樣可以達到事半功倍的效果。詳細步驟及程式碼
父類:新建普通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 Function End Class
D層:
'********************************************** '說明:D層 '計算機名稱:ZHAOHAN '建立日期:2015/5/3 10:24:35 '作者:趙寒 '版本號:V2.00 '********************************************** Imports System.Data.SqlClient Imports IDAL Public 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 Function End 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)
begin
SET @tempSql='SELECT * FROM '+[email protected]+' where CardNo ='[email protected]
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 Function
End Class