三層架構中如何處理組合查詢

來源:互聯網
上載者:User

       在做機房收費系統過程中,遇到最有意思的一點就是處理組合查詢這一部分。

       我們使用三層架構的目的是為瞭解耦,三層架構中分介面層、商務邏輯層、資料層和實體部分,他們各自有各自的職責,詳見我的部落格“如何學習和理解三層架構”。但是在處理組合查詢這一部分的時候,三層架構顯得如此不搭,那麼三層架構中如何處理組合查詢呢?

      下面是我的處理方法:

      首先,UI層(介面層):

      代碼部分:

''' <summary>''' 查詢學生資訊''' </summary>''' <remarks></remarks>Public Class frmInquireStudentInfo    Private Sub cmdInquire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInquire.Click        Dim selectstring As New Entity.SelectString        Dim binquirestudentinfo As New BLL.InquireStudentInfo        Dim dt As New DataTable        Dim F1 As String                '代替field1,欄位1        Dim F2 As String                '代替field2,欄位2        Dim F3 As String                '代替field3,欄位3        Select Case cmbField1.Text            Case "學號"                F1 = "ID"            Case "卡號"                F1 = "CardNo"            Case "姓名"                F1 = "Name"            Case "性別"                F1 = "Sex"            Case "專業"                F1 = "Department"            Case "年級"                F1 = "Grade"            Case "班級"                F1 = "ClassNo"            Case Else                F1 = ""        End Select        Select Case cmbField2.Text            Case "學號"                F2 = "ID"            Case "卡號"                F2 = "CardNo"            Case "姓名"                F2 = "Name"            Case "性別"                F2 = "Sex"            Case "專業"                F2 = "Department"            Case "年級"                F2 = "Grade"            Case "班級"                F2 = "ClassNo"            Case Else                F2 = ""        End Select        Select Case cmbField3.Text            Case "學號"                F3 = "ID"            Case "卡號"                F3 = "CardNo"            Case "姓名"                F3 = "Name"            Case "性別"                F3 = "Sex"            Case "專業"                F3 = "Department"            Case "年級"                F3 = "Grade"            Case "班級"                F3 = "ClassNo"            Case Else                F3 = ""        End Select        '將參數傳遞給實體selectstring        selectstring.Field1 = F1        selectstring.Field2 = F2        selectstring.Field3 = F3        selectstring.Operator1 = cmbOperator1.Text        selectstring.Operator2 = cmbOperator2.Text        selectstring.Operator3 = cmbOperator3.Text        selectstring.ResearchInfo1 = Trim(txtResearchInfo1.Text)        selectstring.ResearchInfo2 = Trim(txtResearchInfo2.Text)        selectstring.ResearchInfo3 = Trim(txtResearchInfo3.Text)        selectstring.Combin1 = cmbCombin1.Text        selectstring.Combin2 = cmbCombin2.Text        '將查詢的結果給表並顯示        dt = binquirestudentinfo.InquireStudentInfo(selectstring)        dgv.DataSource = dt        dgv.AllowUserToAddRows = False    End Sub

      這裡UI層主要負責收集收據,並將資料傳遞給實體類。

      BLL層,即業務處理層。主要負責商務邏輯的整合。

''' <summary>''' Module ID:B18 ''' Depiction:查詢學生基本資料類,用於完成查詢學生基本資料''' Author:李保強''' Create Dates:2012-05-06''' </summary>''' <remarks></remarks>Public Class InquireStudentInfo    ''' <summary>    ''' 查詢學生資訊    ''' </summary>    ''' <param name="selectstring">實體選擇字串</param>    ''' <returns>datatable表</returns>    ''' <remarks></remarks>    Public Function InquireStudentInfo(ByVal selectstring As Entity.SelectString) As DataTable        Dim getinfobystring As New DAL.GetInfoByString        Dim dt As New DataTable        Try            dt = getinfobystring.GetInfoByString("Student", selectstring)            Return dt        Catch ex As Exception            Return dt        End Try    End FunctionEnd Class

       BLL層調用DAL層的方法,因為BLL層對應於UI層,所以BLL層是知道該功能對應的資料表的名稱的,之所以在這裡設定表名稱,是為了用一個方法完成不同功能,當然方法不止一種,大家的方法我也看過幾種,大同小異吧。

      DAL層,即資料層。

''' <summary>''' 通過字串獲得資訊。''' </summary>''' <remarks></remarks>Public Class GetInfoByString    ''' <summary>    ''' 通過字串獲得資訊。    ''' </summary>    ''' <param name="table">資料庫表名稱</param>    ''' <param name="selectstring">實體選擇字串</param>    ''' <returns>datatable表</returns>    ''' <remarks>author:李保強</remarks>    Public Function GetInfoByString(ByVal table As String, ByVal selectstring As Entity.SelectString) As DataTable        Dim helper As DBSQLHelper.SQLHelper        helper = New DBSQLHelper.SQLHelper        Dim dt As DataTable        dt = New DataTable        Dim selectstring1 As New Entity.SelectString        Dim sql As String        sql = selectstring.SelectString(table, selectstring)        Try            dt = helper.ExcuteReader(sql)            Return dt        Catch ex As Exception            Return dt        End Try    End FunctionEnd Class

       資料層主要和資料庫打交道。在這裡DAL層調用了實體的方法selectstring(table,selectstring),這裡實體中加入方法是我處理組合查詢的突破口,下面實體中大家可以看看這個方法的使用。

       Entity層,即實體。(部分代碼)

    ''' <summary>    ''' 產生選擇字串    ''' </summary>    ''' <param name="table">資料庫表名稱</param>    ''' <param name="ss">Selectstring ,實體選擇字串</param>    ''' <returns>字串,sql語句</returns>    ''' <remarks>author:李保強</remarks>    Public Function SelectString(ByVal table As String, ByVal ss As SelectString) As String        Dim sql As String        Try            sql = "select * from " & table & " where " & ss.Field1 & " " & ss.Operator1 & " '" & ss.ResearchInfo1 & "'"            If ss.Combin1 = "" Then                Return sql            Else                sql = sql & " " & ss.Combin1 & " " & ss.Field2 & " " & ss.Operator2 & " '" & ss.ResearchInfo2 & "'"                If ss.Combin2 = "" Then                    Return sql                Else                    sql = sql & " " & ss.Combin2 & " " & ss.Field3 & " " & ss.Operator3 & " '" & ss.ResearchInfo3 & "'"                    Return sql                End If            End If        Catch ex As Exception                   '錯誤處理            sql = ""            Return sql        End Try    End FunctionEnd Class

       這裡實體只給處理selectstirng方法部分。

       selectstring方法的功能是根據傳入的參數合成SQL語句,包括表的名稱,這樣做可以對不同功能進行組合查詢,但是只限於該功能所查詢的資料在一張表中或是在同一視圖中。

       通過這樣處理的組合查詢,很好的遵守了三層架構的要求,實現瞭解耦的目的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.