程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> 用vb.net重構版機房免費零碎之分層、接口、數據庫銜接、反射+工廠

用vb.net重構版機房免費零碎之分層、接口、數據庫銜接、反射+工廠

編輯:VB.NET

用vb.net重構版機房免費零碎之分層、接口、數據庫銜接、反射+工廠。本站提示廣大學習愛好者:(用vb.net重構版機房免費零碎之分層、接口、數據庫銜接、反射+工廠)文章只能為提供參考,不一定能成為您想要的結果。以下是用vb.net重構版機房免費零碎之分層、接口、數據庫銜接、反射+工廠正文


分層

分層是為了增加層與層之間的依賴,添加順序的可讀性,讓整個零碎構造明晰明白,還可大大降低維護本錢,但是分層也有一定的缺陷,有些可以直接訪問數據庫的層,卻要經過擔任訪問數據庫的層停止訪問,這樣,在訪問數據庫進程中就多出一個環節,添加了零碎的開支,有時分要在表示層添加某個功用,為了降低耦合,就不得不自上而下,在每一層外面添加這個功用所需的服務類,這樣就添加了開發本錢

分層越多越好嗎?答案能否定的,援用一句話“我們也要     時辰謹記:不能自覺分層,不應分層而分層不應形式而形式。這是很重要的。不然只能添加開發的擔負(在今後的理論中更好的領會)。”應該是說要依據實踐的狀況停止分層,畢竟不是相對的,由於有些零碎不分層比分層有點更多一些。

根本的分層次要用的是三層架構:

表示層(UI)

次要用於與用戶的交互,擔任傳達用戶的指令以及數據給BLL層,並把用戶需求的數據顯示出來,淺顯的講就是用戶能見到的界面,如窗體順序。

業務邏輯層(BLL)

對數據的邏輯處置,比方把訪問數據庫失掉的數據,轉換成用戶向看到的數據,並提交給表示層停止顯示。

數據訪問層(DAL)

對數據庫停止訪問,提供增刪改查等操作。

上面是我的包圖,每個包就是一個層,其中添加了實體層(Model)、接口層(IDAL)和工廠層(Factory)

實體層(Model)

實踐上就是對應的數據庫外面的每一張表,一個表就建一個類,一個類外面的屬性則是對應表外面的字段,比方表BaseData_Info

在實體層中,就可以這樣樹立一個類:

Public Class BaseDataEntity
    Inherits Entity
     
     
    Private FixedUserHalfHourCost As Single      '固定用戶半小時破費
    Public Property FixdUserHalfHourCost_ As Single
        Get
            Return FixedUserHalfHourCost
        End Get
        Set(value As Single)
            FixedUserHalfHourCost = value
        End Set
    End Property
     
    Private CasualUserAnHourCost As Single   '暫時用戶一小時破費
    Public Property CasualUserAnHourCost_ As Single
        Get
            Return CasualUserAnHourCost
     
        End Get
        Set(value As Single)
            CasualUserAnHourCost = value
        End Set
    End Property
     
    Private IncreasingUnitTime As Single    '單位遞增時間
    Public Property IncreasingUnitTime_ As Single
        Get
            Return IncreasingUnitTime
        End Get
        Set(value As Single)
            IncreasingUnitTime = value
        End Set
    End Property
     
     
    Private AtleastOnlineTime As Single      '最少在線時間
    Public Property AtleastOnlineTime_ As Single
        Get
            Return AtleastOnlineTime
        End Get
        Set(value As Single)
            AtleastOnlineTime = value
        End Set
    End Property
     
    Private ReadyTime As Single     '預備時間
    Public Property ReadyTime_ As Single
        Get
            Return ReadyTime
        End Get
        Set(value As Single)
            ReadyTime = value
        End Set
    End Property
     
    Private AtleastMoney As Single      '最少金額
    Public Property AtleastMoney_ As Single
        Get
            Return AtleastMoney
        End Get
        Set(value As Single)
            AtleastMoney = value
        End Set
    End Property
     
End Class

有什麼用呢?當你需求注冊一個用戶時分,你得從表示層(UI)把數據傳遞給用於訪問數據庫的數據訪問層(DAL),但是,你不能夠把用戶注冊的信息:學號,姓名,卡號,注冊日期,注冊時間,班級。。。。。。等等把參數傳遞給函數,停止添加行操作吧?

    ’你該不會真的這麼傳值吧?被嚇到了
    AddUser(StudentID,StudentName,CardID,RegisterDate,RegisterTime,Class。。。。。。)
    ’而假如你把這些數據封裝成一個類,如上述,你只需求傳遞一個類就行了
    AddUser(UserInfo)

數據庫銜接

關於數據庫的訪問,根本上什麼言語都離不開這麼幾步:

1.      銜接數據庫

2.      執行sql語句

3.      前往sql語句的執行構造

而銜接數據庫的字符串,大家可以參考數據庫銜接字符串大全

執行sql語句可以參考sql語句大全

上面是一個復雜的數據庫訪問例子:

ImportsSystem.Data.SqlClient   ’援用sql客戶端
Public Class SelectDAL
    Public Overloads Function SelectInfo(ByVal Table As String)     '查詢整張表
        Dim DataS As New DataSet
        Try
            Dim SelectStr As String = "select * from " & Table     '查詢語句
            Dim ConnectStr As String ="Data Source=服務器名/服務器地址;Initial Catalog=數據庫名; UserID=sa;Password=123"'數據庫銜接字符串
            Dim DBConnection As New SqlConnection(ConnectStr) '初始化數據庫銜接對象
     
            DBConnection.Open() '銜接數據庫
            'Dim DBCmd As New SqlCommand(SelectStr,DBConnection)    '執行查詢語句
            Dim Adapter As New SqlDataAdapter(SelectStr,DBConnection)  '把查詢後果保管到緩存中
     
            Adapter.Fill(DataS, Table)      '把緩存中的表以Table為名保管到DataSet中
     
     
        Catch ex As Exception
            Throw New ArgumentOutOfRangeException(""& ex.Message)       
End Try
     
        Return DataS
     
End Function

其中銜接數據庫要用到的對象是SqlConnection,執行查詢語句以及前往後果用的是SqlDataAdapter對象。

數據庫的銜接有很多種方式,如本地、近程等。只需參考參考數據庫銜接字符串,根據本身狀況停止選擇運用就可以到達目的。

反射+工廠、接口

關於反射,一開端我十分的茫然,在設計形式外面敲了例子之後,查了很多材料,也不知道怎樣使用到免費零碎中,的確笨到家了。不過,後來看到了高人的博客,才會了。看下圖:

假設說你有BLL和DAL2個層,你希望在BLL外面的一個類A運用DAL外面的BalanceDAL類,你可以經過援用DAL從而到達目的,但是,聽說為了增加BLL與DAL的耦合性,所以在BLL和DAL之間加了個接口層叫IDAL。如下圖

可以看到框中的是下面DAL外面BalanceDAL的接口,這個接口外面包括了詳細類(BalanceDAL)的一切辦法,所以我們只需調用接口,就相當於調用了詳細類(BalanceDAL),但是,前提是你必需把接口和詳細類接通,就好比電視機和遙控器,遙控器是電視機接口,要想遙控器能控制接口,電視機外面應該要有一個可以接納並處置紅外線新號的安裝,當你運用遙控器的時分,遙控器跟電視機是聯通的,他們之間經過了紅外線聯通。現實上,接口與詳細類之間的關系,只是兩者之間創立了一條管道,接口中沒有詳細的功用,但卻有那個詳細類運用的一個辦法(好像遙控器上的按鍵),假如遙控器跟電視機之間沒有聯通,那麼你按一下遙控器,是不會完成開機或許調頻等功用的,所以,要運用接口,必需讓接口與詳細完成的類停止聯通,這裡有兩步走,第一步是援用,第二步是創立實例。看下圖:

前往欄目頁:

在DAL的援用裡把IDAL打上勾就行了也就相當於在這兩個層之間架起了橋梁,接上去,我們讓DAL來完成這個接口,也就是在DAL外面創立詳細類之後,寫上關鍵字+你要完成的接口,然後回車,它就會自動列出你在接口裡寫的辦法,然後再辦法裡,你去詳細的完成吧。

然後,我們需求在橋梁下面加管道,加了管道,就是把接口的辦法和詳細類的辦法銜接起來,使得我在BLL層外面調用接口的辦法,就相當於調用了詳細類的辦法,但是我BLL並不知道詳細類究竟是怎樣完成的,聽說,這就是降低了BLL層與DAL層之間的耦合,由於我只關懷接口IDAL就行了。如下代碼,看BLL裡是如何運用接口

Imports System.Reflection           ’反射的援用
Public ClassBalanceBLL
    FunctionBalanceQuery(ByVal CardID AsString)
        IfCardID = "" Then
            ThrowNewArgumentOutOfRangeException("","請輸出卡號:")
        EndIf
     
        DimIBalance As IDAL.IBalance    '余額接口
       IBalance = CType(Assembly.Load("DAL").CreateInstance("DAL.BalanceDAL"),IDAL.IBalance)   '失掉余額類
        DimDS As NewDataSet
        Try
     
           DS = IBalance.SelectBalanceInfo(CardID) '查詢並前往數據集後果
            IfDS.Tables(0).Rows.Count < 1 Then
               Throw NewArgumentOutOfRangeException("","沒有這個卡號的余額記載")
            EndIf
        Catchex As Exception
            ThrowNewArgumentOutOfRangeException("",ex.Message)
        EndTry
        ReturnDS
    EndFunction

這裡,我們首先援用了反射,然後創立接口(IBalance),再然後就是經過反射,把DAL層裡的BalanceDAL詳細類的實例反射過去給接口,這樣,我們就相當於在接口和詳細類之間銜接了管道,然後我們就可以運用詳細類的辦法了:IBalance.SelectBalanceInfo(CardID)'查詢並前往數據集後果

後來發現,把DAL層外面的類反射到BLL層外面,也就相當於在BLL層外面消費了DAL層的類,然後反射失掉詳細類的那些代碼,我便籠統出了一個層,名曰Factory層,只需BLL援用工廠,便可以經過工廠前往詳細類了。這也就是反射+工廠的使用吧。

仿佛寫的有點長,原本還有重載、配置文件、異常處置、存儲進程等比擬適用點的技術要寫的,算了,放到下一篇吧。希望對大家有協助。

雖說面向對象比擬復雜,但是總體的覺得,它就是把很多復雜的東西分類、分塊、分層、分......然後用線把他們竄起來,你不用完全的記住一切的分塊,但你可以順著那些圖紙毫不保存的理解到細節,只需去習氣這樣的思想方式,置信也不太難的。

作者:csdn博客 羅智福

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved