私の経験では、アプリケーション層はビジネス層を参照し、ビジネス層はデータ層を参照する必要があります。以下に示すように、アプリケーション層がデータ層を直接参照するようにアプリを変更したいと考えています。
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
) を使用するビジネス レイヤーでクラスを作成することもできます。つまり、ApplicationLayerClass.ProcessAllPersons によって呼び出され、DataLayerClass.getAllPersons を呼び出す BusinessLayerClass.ProcessAllPersons という関数です。どちらのオプションがより適切ですか? 問題のドメインにある程度依存すると思います。