天天看點

【機房重構之積累】

前言:

進入個人機房重構有一段時間了,這次的機房收費系統加入了七層,應用vb.net語言等等,學習了新的東西,這篇文章主要講vb.net在機房這個系統的小知識。本篇主要介紹四個知識點:

核心:

  (一)、傳參與傳實體

          在機房重構開始的時候,一直是傳實體,但是實體和值所占的空間可是差的很多。

  :什麼是傳實體呢?在機房個人重構的時候,我們定義了一個實體層,在裡面,我們寫好了屬性和方法:

我們需要更新的是卡表,充值表,學生表,這樣就需要我們傳實體比較好。

UI層

Dim Fifregister As New Facade.FRegister
        Dim card As New Entity.ECard
        Dim student As New Entity.EStudent
        Dim recharge As New Entity.ERecharge


        '卡表
        card.CardNo = txtCardId.Text.Trim()
        card.Nvr_Cash = txtCash.Text.Trim()
        card.Type = cmbType.Text.Trim()
        card.Riqi = Date.Now.ToString("yyyy - MM - dd") 
        card.Time = DateTime.Now.ToString("HH:mm:ss") 
        card.CheckStatus = True
        card.UserStatus = True
        'card.UserID =
        '學生表
        student.StudenID = txtStudentId.Text.Trim()
        student.StudentName = txtName.Text.Trim()
        student.Sex = cmbSex.Text.Trim()
        student.Department = txtDepartment.Text.Trim()
        student.Major = txtMajor.Text.Trim()
        student.Grade = cmbGrade.Text.Trim()
        student.classes = cmbClass.Text.Trim()
        student.Explain = txtExplain.Text.Trim()

        '充值表
        recharge.CardNo = txtCardId.Text.Trim()
        recharge.CheckStatus = False
        recharge.Recharge = txtCash.Text.Trim()
        recharge.RechargeDate = Date.Now.ToString("yyyy - MM - dd") 
        recharge.RechargeTime = DateTime.Now.ToString("HH:mm:ss") 

        Dim flag2 As String
        flag2 = Fifregister.Ifregister(card)
        If flag2 = True Then
            Dim flag1 As String
            flag1 = Fifregister.FAdd(card, student, recharge)
        End If      

B層 :這個是B層的一個方法,注意下面的Byval傳的實體

Public Class BRegister
    Public Function Ifuse(ByVal cardno As Entity.ECard) As String
        Dim Iregister As IDAL.IRegister
        Iregister = Factory.DataAccess.RegisterCardInfo

        Dim myTable As New DataTable
        myTable = Iregister.ifregister(cardno)


        If myTable.Rows.Count = 0 Then

            MsgBox("注冊成功!")

        Else
            MsgBox("該卡号已經注冊過,請重新注冊!!")
        End If

        Return True
    End Function      

外觀層、D層、接口層都是實體。

這是D層的一個方法,在指派的時候,直接用實體.方法

Public Function ifregister(cardno As Entity.ECard) As DataTable Implements IDAL.IRegister.ifregister
        Dim Sql As String
        Dim table As New DataTable '中間變量用于存儲從資料庫中 查找資訊
        '聲明并執行個體化參數數組
        Dim sqlParams As SqlParameter() = {New SqlParameter("@Chr_CardNo", cardno.CardNo),
                                           New SqlParameter("@Chr_UserStatus", cardno.UserStatus)}
        '調用SQL語句查詢
        Sql = "select * from T_Card where Chr_CardID = @Chr_CardNo and Bit_UserStatus = @Chr_UserStatus"
        '調用SqlHlper類中的ExecSelect()方法來執行查詢,并擷取傳回值
        Dim mylist As New List(Of Entity.ECard)
        table = helper.ExecSelect(Sql, CommandType.Text, sqlParams)
        Return table
    End Function      

傳參數:(管理使用者為例)—判斷使用者級别

Private Sub cmbUserLevel_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbUserLevel.SelectedIndexChanged
        '根據使用者級别加載資訊
        Dim userlevel As String
        userlevel = cmbUserLevel.Text.Trim
        Dim fac As New Facade.FManageUser
        Dim mylist As List(Of Entity.ELogin)
        mylist = fac.Show(userlevel)
        If mylist.Count = 0 Then
            MsgBox("沒有該使用者級别資訊,請查詢其他資訊")
        Else
            dgvUserInfo.DataSource = mylist

        End If      

注意:userlevel定義的是字元串

同樣的外觀層、B層、D層傳遞的也是參數,

下面外觀代碼:

Public Function Show(ByVal level As String) As List(Of Entity.ELogin)
        Dim bshow As New BLL.BManageUser
        Dim flag As List(Of Entity.ELogin)

        flag = bshow.Show(level)
        Return flag      

那麼,在D層會如何運用呢?

在指派的時候直接寫這個參數就行了!

Public Function Show(level As String) As List(Of Entity.ELogin) Implements IDAL.IManagerUser.Show
        Dim sql As String
        Dim sqlparams As SqlParameter() = {New SqlParameter("@Chr_Level", level)}
        Dim table As New DataTable
        sql = "select * from T_User where Chr_Level=@Chr_Level "
        table = helper.ExecSelect(sql, CommandType.Text, sqlparams)
        Dim mylist As List(Of Entity.ELogin)
        mylist = Convert.convertToList(Of Entity.ELogin)(table)
        Return mylist      

在重構的時候,自己對這個并不是很了解,是以總結出來,僅供參考,希望對你有幫助!

   (二)、byval與Byref

 在開始敲機房的時候,并沒有多想,一直都用的是byval,自己也不清楚,之後通過查資料才發現:原來我們之前接觸過:

我們先來回顧一下傳值和傳位址

傳值:我們傳遞給函數是一個單純的數值過去)按值傳遞參數時,傳遞的隻是變量的 副本。如果過程改變了這個值,則所作變動隻影響副本而不會影響變量本身

傳位址:按位址傳遞參數時,過程用變量的記憶體位址去通路實際變量的内容。

為什麼要回顧這個呢?今天我們講到的Byval和Byref就和這個有關

Byval:按值傳遞

Byref:按位址傳遞

下面這篇文章介紹的很詳細!

​​http://www.111cn.net/net/vb-net/58999.htm​​

【機房重構之積累】

    (三)、sub與function

對于菜鳥的我,在開始個人重構的時候,一直用的是Function

sub:過程,不傳回數值

function:函數,有傳回數值

【機房重構之積累】

   (四)、屬性、方法的建立

Private _CardNo As String      
Public Property CardNo() As String
        Get
            Return _CardNo
        End Get
        Set(value As String)
            _CardNo = value
        End Set
    End Property      

總結: