VB.NET三層數(shù)據(jù)結(jié)構(gòu)構(gòu)建方式分析
VB.NET的編寫(xiě)方式和其他語(yǔ)言相比有許多不同之處,比如在構(gòu)建三層架構(gòu)方面。我們就可以通過(guò)本文介紹的內(nèi)容對(duì)此進(jìn)行一個(gè)詳細(xì)的解讀。我們主要介紹的是VB.NET三層數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),以及將介紹如何創(chuàng)建一個(gè)Web Service服務(wù)。#t#
該結(jié)構(gòu)分三個(gè)層次:表示層、業(yè)務(wù)層、數(shù)據(jù)層。
數(shù)據(jù)層:代表物理數(shù)據(jù)庫(kù)。
業(yè)務(wù)層:負(fù)責(zé)數(shù)據(jù)層與表示層之間的數(shù)據(jù)傳輸。
表示層:應(yīng)用程序的客戶端,它通過(guò)業(yè)務(wù)層來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。
表示層所操作的是駐留在內(nèi)存中的本地?cái)?shù)據(jù),當(dāng)需要更新數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),要通過(guò)業(yè)務(wù)層提供的更新方法實(shí)現(xiàn)。這樣可以大大提高應(yīng)用程序的性能,而且,什么時(shí)候更新數(shù)據(jù)完全由你決定,提高了編程的靈活性。
VB.NET三層數(shù)據(jù)結(jié)構(gòu)實(shí)例:
這里我們具體做一個(gè)實(shí)例來(lái)看看如何用VB.NET三層數(shù)據(jù)結(jié)構(gòu)的應(yīng)用程序。
數(shù)據(jù)庫(kù):我們選擇SQL SERVER 的NorthWind數(shù)據(jù)庫(kù)。
業(yè)務(wù)層:我們創(chuàng)建一個(gè)WebService作為中間層。(需要安裝IIS服務(wù))
表示層:我們寫(xiě)一個(gè)Windows Form
第一步:創(chuàng)建WebService.
VB.NET三層數(shù)據(jù)結(jié)構(gòu)具體步驟如下:
1. 新建一個(gè)項(xiàng)目,選擇ASP.NET Web服務(wù),命名為:“WebService For 業(yè)務(wù)層”。
2. 添加兩個(gè)Sql DataAdapter,一個(gè)為Customer_da,它指向NorthWind數(shù)據(jù)庫(kù)的Customers表,另一個(gè)為Order_da,指向Northwind數(shù)據(jù)庫(kù)的Orders表。
3. 然后生成一個(gè)Typed DataSet(選擇“數(shù)據(jù)”菜單的“生成數(shù)據(jù)集”),命名為:Super_ds.
4. 數(shù)據(jù)庫(kù)連接已經(jīng)完成,下一步我們將考慮它與表示層之間的通信,這里我們定義兩個(gè)方法。一個(gè)為:Get_DataSet,它返回一個(gè)Super_ds類(lèi)型的數(shù)據(jù)集,另一個(gè)為:Update_DataSet,它負(fù)責(zé)更新數(shù)據(jù)庫(kù)數(shù)據(jù), 方法代碼如下:
- < WebMethod()> Public
Function Get_Dataset()
As super_ds- customer_da.Fill
(Super_ds1.Customers)- order_da.Fill(Super_ds1.Orders)
- Return Super_ds1
- End Function
- < WebMethod()> Public
Sub Update_Dataset()- Super_ds1.AcceptChanges()
- End Sub
你可以運(yùn)行測(cè)試一下你建立的這個(gè)WebService.它將提供兩個(gè)方法。返回的DataSet是以XML表示的。
業(yè)務(wù)層的完整代碼如下:
- Imports System.Web.Services
- Public Class Service1
- Inherits System.Web.Services
.WebService- ‘Web Services Designer
Generated Code……。- < WebMethod()> Public Function
Get_Dataset() As super_ds- customer_da.Fill(Super_ds1.Customers)
- order_da.Fill(Super_ds1.Orders)
- Return Super_ds1
- End Function
- < WebMethod()> Public Sub
Update_Dataset()- Super_ds1.AcceptChanges()
- End Sub
- ' WEB SERVICE EXAMPLE
- ' The HelloWorld() example service
returns the string Hello World.- ' To build, uncomment the following
lines then save and build the project.- ' To test this web service, ensure
that the .asmx file is the start page- ' and press F5.
- '
- '< WebMethod()> Public Function
HelloWorld() As String- ' HelloWorld = "Hello World"
- ' End Function
- End Class
VB.NET三層數(shù)據(jù)結(jié)構(gòu)之創(chuàng)建表示層
具體步驟如下:
1. 新建一個(gè)Windows應(yīng)用程序,命名為:“Windows Form For 表示層”。
2. 在窗體上添加一個(gè)DataGrid,一個(gè)Button,Button1的text為“Load”,作用是:從業(yè)務(wù)層讀取數(shù)據(jù)。
3. 在解決方案窗體中添加Web 引用,將我們自己建立的Web Service for 業(yè)務(wù)層引入到當(dāng)前項(xiàng)目中。
4. 向Button1的Click事件添加如下代碼:
- Dim Customer_Ds As New
localhost.super_ds()- Dim ser1 As New local
host.Service1()- Customer_Ds.Merge
(ser1.Get_Dataset)- DataGrid1.DataSource
= Customer_Ds
這里我們調(diào)用了Web Service的Get_DataSet函數(shù),Update_DataSet方法的調(diào)用與此完全相同。
#p#
表示層的完整代碼如下:
- Imports Data_Access_表示層
- Public Class Form1
- Inherits System.Windows.Forms.Form
- #Region " Windows Form Designer
generated code "- Public Sub New()
- MyBase.New()
- 'This call is required by the
Windows Form Designer.- InitializeComponent()
- 'Add any initialization after the
InitializeComponent() call- End Sub
- 'Form overrides dispose to clean
up the component list.- Protected Overloads Overrides Sub
Dispose(ByVal disposing As Boolean)- If disposing Then
- If Not (components Is Nothing) Then
- components.Dispose()
- End If
- End If
- MyBase.Dispose(disposing)
- End Sub
- Friend WithEvents Button1 As
System.Windows.Forms.Button- Friend WithEvents Button2 As
System.Windows.Forms.Button- Friend WithEvents Button3 As
System.Windows.Forms.Button- Friend WithEvents Client_DataSet
As Data_Access_表示層。localhost.super_ds- Friend WithEvents DataGrid1 As
System.Windows.Forms.DataGrid- 'Required by the Windows Form Designer
- Private components As System.
ComponentModel.Container- 'NOTE: The following procedure is
required by the Windows Form Designer- 'It can be modified using the
Windows Form Designer.- 'Do not modify it using the code editor.
- < System.Diagnostics.Debugger
StepThrough()> Private Sub
InitializeComponent()- Me.Button1 = New System.
Windows.Forms.Button()- Me.Button2 = New System.
Windows.Forms.Button()- Me.Button3 = New System.
Windows.Forms.Button()- Me.Client_DataSet = New
Data_Access_表示層。localhost
.super_ds()- Me.DataGrid1 = New System.Windows.
Forms.DataGrid()- CType(Me.Client_DataSet, System
.ComponentModel.ISupportInitialize)。
BeginInit()- CType(Me.DataGrid1, System.
ComponentModel.ISupportInitialize)。
BeginInit()- Me.SuspendLayout()
- '
- 'Button1
- '
- Me.Button1.Location = New System.
Drawing.Point(88, 360)- Me.Button1.Name = "Button1"
- Me.Button1.TabIndex = 0
- Me.Button1.Text = "load"
- '
- 'Button2
- '
- Me.Button2.Location = New System.
Drawing.Point(232, 360)- Me.Button2.Name = "Button2"
- Me.Button2.TabIndex = 1
- Me.Button2.Text = "update"
- '
- 'Button3
- '
- Me.Button3.Location = New System
.Drawing.Point(376, 360)- Me.Button3.Name = "Button3"
- Me.Button3.TabIndex = 2
- Me.Button3.Text = "clear"
- '
- 'Client_DataSet
- '
- Me.Client_DataSet.DataSetName =
"Client_DataSet"- Me.Client_DataSet.Locale = New
System.Globalization.CultureInfo("zh-CN")- Me.Client_DataSet.Namespace =
"http://www.tempuri.org/CustomerDs.xsd"- '
- 'DataGrid1
- '
- Me.DataGrid1.DataMember = ""
- Me.DataGrid1.Location = New
System.Drawing.Point(40, 56)- Me.DataGrid1.Name = "DataGrid1"
- Me.DataGrid1.Size = New System.
Drawing.Size(480, 264)- Me.DataGrid1.TabIndex = 3
- '
- 'Form1
- '
- Me.AutoScaleBaseSize = New
System.Drawing.Size(6, 14)- Me.ClientSize = New System.
Drawing.Size(568, 429)- Me.Controls.AddRange(New
System.Windows.Forms.Control()
{Me.DataGrid1, Me.Button3,
Me.Button2, Me.Button1})- Me.Name = "Form1"
- Me.Text = "Form1"
- CType(Me.Client_DataSet,
System.ComponentModel.
ISupportInitialize)。EndInit()- CType(Me.DataGrid1, System.
ComponentModel.ISupportInitialize)。EndInit()- Me.ResumeLayout(False)
- End Sub
- #End Region
- Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click- Dim Customer_Ds As New localhost.super_ds()
- Dim ser1 As New localhost.Service1()
- Customer_Ds.Merge(ser1.Get_Dataset)
- DataGrid1.DataSource = Customer_Ds
- End Sub
- End Class
總結(jié):可見(jiàn),VB.NET三層數(shù)據(jù)結(jié)構(gòu)中的表示層窗體上完全沒(méi)有數(shù)據(jù)庫(kù)連接控件,它與數(shù)據(jù)庫(kù)的連接任務(wù)是通過(guò)業(yè)務(wù)層來(lái)完成的,這樣,程序的結(jié)構(gòu)更加清晰,當(dāng)然業(yè)務(wù)層的實(shí)現(xiàn)也可以用其他方法,比如:寫(xiě)一個(gè)自己的類(lèi)來(lái)完成與數(shù)據(jù)庫(kù)的數(shù)據(jù)傳輸。