根據我的經驗,應用層應引用業務層,業務層應引用數據層。我想做出改變,以一個應用程序,使應用層引用直接在數據層如下:應用層直接引用數據層
Imports System.Data.SqlClient
Public Class ApplicationLayerClass
Public Function ProcessAllPersons()
Dim data As New DataLayerClass
Dim list As List(Of Person) = data.getAllPersons()
For Each person In list
'Call this function from the application client. Do some complex work on the person here.
Next
End Function
End Class
Public Class DataLayerClass
Public Function getAllPersons() As List(Of Person)
Dim list As List(Of Person) = New List(Of Person)
Dim p As New Person
Dim objCommand As New SqlCommand
Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True"
Dim objCon As New SqlConnection
objCon.ConnectionString = strConString
objCon.Open()
objCommand.Connection = objCon
objCommand.CommandText = "select * from person "
Dim objDR As SqlDataReader = objCommand.ExecuteReader
If objDR.HasRows Then
Using objCon
Do While objDR.Read
p.Name = objDR("Name")
p.age = objDR("Age")
list.Add(p)
Loop
End Using
End If
Return list
End Function
End Class
Public Class Person
Public Name As String
Public age As String
End Class
我也可以在使用適配器模式(http://en.wikipedia.org/wiki/Adapter_pattern
)即業務層創建一個類函數稱爲BusinessLayerClass.ProcessAllPersons,由ApplicationLayerClass.ProcessAllPersons調用並調用DataLayerClass.getAllPersons。哪個選項更合適?我想這在一定程度上取決於問題領域。
謝謝。 +1。我相信你的兩個評論相互矛盾,即「如果你在業務層中添加了傳遞函數,那麼你所做的只是添加了更多的代碼而沒有明顯的好處」,並且「讓它直接將數據傳遞給數據層更有意義,更一致「。你能澄清嗎?謝謝。 – w0051977
@ w0051977 ...如果您的業務層是作爲實例而不是抽象(接口)公開的,那麼您沒有與客戶端建立「契約」,因此添加一個函數僅用於將呼叫傳遞給您的數據層不好 - 國際海事組織。用接口公開業務層可以創建與客戶端的契約,併爲您提供更大的靈活性。我覺得這種方式更清潔,更面向對象,但在您的情況下可能不需要。 –