機械室の再構築——テンプレート方法モード+単例モード+ストレージプロセス最適化組合せクエリー
15452 ワード
コンビネーションクエリーという機能の実現は、VBの中ですでに体験されています.その中には大量の重複コードがあり、システムの性能に大きく影響しています.このブログでは、オブジェクト向けのVB.NET版コンビネーションクエリーを紹介します.その中で、テンプレートメソッドモードと組み合わせてコンビネーションクエリーを最適化しました.テンプレートメソッドモードとは何ですか.その切り札は何ですか.なぜコード多重化を実現できるのか、私たちはどのようにして私たちの望む結果を達成することができますか?答えを予知し、素晴らしい内容は以下の通りです.
テンプレートのメソッドパターンについては、ブログを参照してください.http://blog.csdn.net/hongwei15732623364/article/details/50659283
組合せクエリーの実装手順:
一、準備作業:
(1)親フォームの作成:
(2)継承フォームの作成:
二、ストレージプロセスの作成:
ストレージプロセスは長い間悩んでいましたが、SQL文にはスペースが1つ少なく書かれていて、最後の結果は「テーブル0が見つかりません」、char()、括弧の数値表示がASCコードに対応していることも分かりました.今回のストレージプロセスの使用により、より深く理解できましたが、時には間違えることもありますが、大丈夫です.やってみて、いつも分かります.
三、実装コード部分:
親フォームコード:
(1)まずフォームがロードされた後、Comboxコントロールで必要なクエリーフィールドを自動的にロードする必要があります.
(2)フォームのClickイベント:
(3)テンプレートメソッドパターンを書き出すダミーメソッド:
(4)コントロールの可用性の最適化:
サブフォーム(UStudentservice):
(1)単例モードを追加する:
メインフォームfrmMainでの実装に注意:
(2)ハッシュテーブルを用いてコントロールをロードするItemを完璧に実現し,1つ1つ書く悩みを省く.
(3)データベース識別可能な名前に変換:
(4)具体的な書き換え方法:
四、感想をまとめる:
組み合わせて全体の構想を検索してVB版の機械室の料金徴収システムとほとんど同じで、異なっているのは今回私が設計モードに参加して、完璧にコードの多重化を実現して、この2回機械室の料金徴収システムをして、最も深い感じのは構想がすでに簡単に見つけることができて、具体的なモードの使用はまだ多くのトレーニングが必要で、今回の組み合わせの検索の最適化のハイライトは:
1.単例モードでマルチフォーム表示の問題を簡単に解決し、ユーザーに極めて便利をもたらす.
2.テンプレートメソッドモードを使用して同じ部分をカプセル化し、コード多重化を完璧に実現し、システムの性能を増加し、オブジェクト向けを実現する.
3.ストレージプロセスはシステムの性能を高め、システムのデータベースへのアクセスを簡単にする.
4.ハッシュ表はコントロールのItemの追加を実現し、コード量を減らし、入力エラーを減らし、作業効率を高める.
コンビネーションクエリは複雑に見えますが、バスを見つけて、ゆっくりと考えを明らかにすれば、問題ではありません.だから、コードを書く前に最も重要な過程は考えることです.
貴重な時間をありがとうございます.通りかかった大牛の指摘を歓迎します.
テンプレートのメソッドパターンについては、ブログを参照してください.http://blog.csdn.net/hongwei15732623364/article/details/50659283
組合せクエリーの実装手順:
一、準備作業:
(1)親フォームの作成:
(2)継承フォームの作成:
二、ストレージプロセスの作成:
ALTER PROCEDURE [dbo].[PROC_Studentservice]
@Comboa1 varchar(50),
@Comboa2 varchar(50),
@Comboa3 varchar(50),
@Combob1 varchar(50),
@Combob2 varchar(50),
@Combob3 varchar(50),
@Combod1 varchar(50),
@Combod2 varchar(50),
@txtc1 varchar(50),
@txtc2 varchar(50),
@txtc3 varchar(50),
@listName varchar(20)
AS
declare @strSQL varchar(500)
BEGIN
set @strSQL='select * from '+@listName+' where '+@Comboa1+@Combob1+char(39)+@txtc1+char(39)
if(@Combod1<>'')
begin
set @strSQL =@strSQL+@Combod1+CHAR(32)+@Comboa2+@Combob2+CHAR(39)+@txtc2+CHAR(39)
if (@Combod2<>'')
begin
set @strSQL=@strSQL +@Combod2+CHAR(32)+@Comboa3+@Combob3+CHAR(39)+@txtc3+CHAR(39)
end
end
execute(@strSQL)
END
ストレージプロセスは長い間悩んでいましたが、SQL文にはスペースが1つ少なく書かれていて、最後の結果は「テーブル0が見つかりません」、char()、括弧の数値表示がASCコードに対応していることも分かりました.今回のストレージプロセスの使用により、より深く理解できましたが、時には間違えることもありますが、大丈夫です.やってみて、いつも分かります.
三、実装コード部分:
親フォームコード:
(1)まずフォームがロードされた後、Comboxコントロールで必要なクエリーフィールドを自動的にロードする必要があります.
<span style="font-size:18px;"><span style="font-size:18px;"> Private Sub UGroupQuery_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' ,
' , “”,
e_group.comboa1 = ""
e_group.comboa2 = ""
e_group.comboa3 = ""
'
Combob1.Items.Add(">")
Combob1.Items.Add("<")
Combob1.Items.Add("=")
Combob1.Items.Add("<>")
Combob2.Items.Add(">")
Combob2.Items.Add("<")
Combob2.Items.Add("=")
Combob2.Items.Add("<>")
Combob3.Items.Add(">")
Combob3.Items.Add("<")
Combob3.Items.Add("=")
Combob3.Items.Add("<>")
'
Combod1.Items.Add(" ")
Combod1.Items.Add(" ")
Combod2.Items.Add(" ")
Combod2.Items.Add(" ")
' ,
Comboa2.Enabled = False
Comboa3.Enabled = False
Combob2.Enabled = False
Combob3.Enabled = False
Combod2.Enabled = False
txtc2.Enabled = False
txtc3.Enabled = False
'
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Dim i As Integer
For i = 0 To dgv.Columns.Count - 1
dgv.Columns(i).Width = DataGridViewAutoSizeColumnMode.AllCells
Next
End Sub</span></span>
(2)フォームのClickイベント:
<span style="font-size:18px;"><span style="font-size:18px;"> Protected e_group As New Entity.GroupEntity
''' <summary>
''' ,Click
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
'''
Private Sub btnCheck_Click(sender As Object, e As EventArgs) Handles btnCheck.Click
dgv.DataSource = Nothing ' ,
'
If Combod1.Text = "" Then
If Comboa1.Text = "" Or Combob1.Text = "" Or txtc1.Text = "" Then
MsgBox(" ")
End If
End If
' ,
If Combod1.Text <> "" Then
If Comboa2.Text = "" Or Combob2.Text = "" Or txtc2.Text = "" Then
MsgBox(" ")
End If
End If
' ,
If Combod2.Text <> "" Then
If Comboa3.Text = "" Or Combob3.Text = "" Or txtc3.Text = "" Then
MsgBox(" ")
End If
End If
'
e_group.Listname = GetdbName()
e_group.comboa1 = ToEnglish(Comboa1.Text)
e_group.comboa2 = ToEnglish(Comboa2.Text)
e_group.comboa3 = ToEnglish(Comboa3.Text)
e_group.combob1 = Combob1.Text.Trim
e_group.combob2 = Combob2.Text.Trim
e_group.combob3 = Combob3.Text.Trim
e_group.txtc1 = txtc1.Text.Trim
e_group.txtc2 = txtc2.Text.Trim
e_group.txtc3 = txtc3.Text.Trim
'
e_group.combod1 = ToEnglish(Combod1.Text)
e_group.combod2 = ToEnglish(Combod2.Text)
Dim dt As New DataTable
Dim ugroup As New Facade.GroupFacade '
dt = ugroup.Grouplist1(e_group)
If dt Is Nothing Then
MsgBox(" ")
Else
Call Todgv()
End If
End Sub</span></span>
(3)テンプレートメソッドパターンを書き出すダミーメソッド:
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
''' , ToEnglish,
''' </summary>
''' <param name="turnName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Overridable Function ToEnglish(turnName As String) As String
Return ""
End Function
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
'''
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overridable Function GetdbName() As String
Return ""
End Function
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
''' Datagridview
''' </summary>
''' <remarks></remarks>
Protected Overridable Sub Todgv()
End Sub</span></span>
(4)コントロールの可用性の最適化:
<span style="font-size:18px;"><span style="font-size:18px;">''' <summary>
''' ,
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Combod1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Combod1.SelectedIndexChanged
If Combod1.Text = "" Then
Comboa2.Enabled = False
Comboa3.Enabled = False
Combob2.Enabled = False
Combob3.Enabled = False
Combod2.Enabled = False
txtc2.Enabled = False
txtc3.Enabled = False
Else
Comboa2.Enabled = True
Combob2.Enabled = True
Combod2.Enabled = True
txtc2.Enabled = True
End If
End Sub
''' <summary>
''' ,
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Combod2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Combod2.SelectedIndexChanged
If Combod2.Text = "" Then
Comboa3.Enabled = False
Combob3.Enabled = False
txtc3.Enabled = False
Else
Comboa3.Enabled = True
Combob3.Enabled = True
txtc3.Enabled = True
End If
End Sub
End Class</span></span>
サブフォーム(UStudentservice):
(1)単例モードを追加する:
<span style="font-size:18px;"><span style="font-size:18px;"> Private Shared Student As UStudentservice ' , C# static
Private Sub New() ' , New
' 。
InitializeComponent()
' InitializeComponent() 。
End Sub
'
Public Shared Function GetInstance() As UStudentservice
If Student Is Nothing OrElse Student.IsDisposed Then ' , nothing, dispose
Student = New UStudentservice
Student.MdiParent = frmMain.ActiveForm
End If
Return Student ' ,
End Function</span></span>
メインフォームfrmMainでの実装に注意:
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
'''
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click
UStudentservice.GetInstance.Show()
End Sub</span></span>
(2)ハッシュテーブルを用いてコントロールをロードするItemを完璧に実現し,1つ1つ書く悩みを省く.
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
''' Combo item
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub UStudentservice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim turnField As New Hashtable ' hashtable
Dim FieldName() As String
Dim FieldValue() As String '
'
FieldName = {" ", " ", " ", " ", " ", " ", " ", " "}
FieldValue = {"Cardno", "Studentname", "Studentno", "Sex", "Department", "Grade", "Onclass", "Holder"}
' Field
Comboa1.Items.AddRange(FieldName)
Comboa2.Items.AddRange(FieldName)
Comboa3.Items.AddRange(FieldName)
Comboa1.Items.Add(" ")
'value hashtable
For i As Integer = 0 To FieldName.Count - 1
turnField.Add(FieldName(i), FieldValue(i))
Next
End Sub</span></span>
(3)データベース識別可能な名前に変換:
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
'''
''' </summary>
''' <param name="turnName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function ToEnglish(turnName As String) As String
'Return MyBase.ToEnglish(comboa)
Select Case turnName
Case " "
Return "Cardno"
Case " "
Return "Studentname"
Case " "
Return "Studentno"
Case " "
Return "Sex"
Case " "
Return "Department"
Case " "
Return "Grade"
Case " "
Return "Onclass"
Case " "
Return "Holder"
Case " "
Return "and"
Case " "
Return "or"
Case Else
Return ""
End Select
End Function</span></span>
(4)具体的な書き換え方法:
<span style="font-size:18px;"><span style="font-size:18px;"> ''' <summary>
''' ,
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function GetdbName() As String
Return "T_Student"
End Function
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;"> Protected Overrides Sub Todgv()
dgv.DataSource = Nothing
Dim UGroupQuery As New UGroupQuery '
Dim ugroup As New Facade.GroupFacade
Dim table As DataTable
Try
table = ugroup.Grouplist1(e_group)
If table.Rows.Count = 0 Then
table.Clear()
dgv.DataSource = Nothing
dgv.Refresh()
MsgBox(" ")
Else
'dgv.DataSource = Nothing
dgv.DataSource = table
dgv.Columns(0).HeaderText = " "
dgv.Columns(1).HeaderText = " "
dgv.Columns(2).HeaderText = " "
dgv.Columns(3).HeaderText = " "
dgv.Columns(4).HeaderText = " "
dgv.Columns(5).HeaderText = " "
dgv.Columns(6).HeaderText = " "
dgv.Columns(7).HeaderText = " "
'
dgv.AllowUserToAddRows = False
End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString, " ")
End Try
End Sub</span></span>
四、感想をまとめる:
組み合わせて全体の構想を検索してVB版の機械室の料金徴収システムとほとんど同じで、異なっているのは今回私が設計モードに参加して、完璧にコードの多重化を実現して、この2回機械室の料金徴収システムをして、最も深い感じのは構想がすでに簡単に見つけることができて、具体的なモードの使用はまだ多くのトレーニングが必要で、今回の組み合わせの検索の最適化のハイライトは:
1.単例モードでマルチフォーム表示の問題を簡単に解決し、ユーザーに極めて便利をもたらす.
2.テンプレートメソッドモードを使用して同じ部分をカプセル化し、コード多重化を完璧に実現し、システムの性能を増加し、オブジェクト向けを実現する.
3.ストレージプロセスはシステムの性能を高め、システムのデータベースへのアクセスを簡単にする.
4.ハッシュ表はコントロールのItemの追加を実現し、コード量を減らし、入力エラーを減らし、作業効率を高める.
コンビネーションクエリは複雑に見えますが、バスを見つけて、ゆっくりと考えを明らかにすれば、問題ではありません.だから、コードを書く前に最も重要な過程は考えることです.
貴重な時間をありがとうございます.通りかかった大牛の指摘を歓迎します.