1

私の経験では、アプリケーション層はビジネス層を参照し、ビジネス層はデータ層を参照する必要があります。以下に示すように、アプリケーション層がデータ層を直接参照するようにアプリを変更したいと考えています。

    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 という関数です。どちらのオプションがより適切ですか? 問題のドメインにある程度依存すると思います。

4

3 に答える 3

1

データレイヤーを直接呼び出す正当な理由がある場合は、それを実行してください。ビジネス レイヤーにパススルー機能を追加すると、コードを追加するだけで何のメリットもありません。

ここで、ビジネス レイヤーがIBusinessLayerなどのインターフェイスを介して公開されている場合、それにProcessAllPersons()関数を追加し、呼び出しをデータ レイヤーに直接渡すと、より意味があり、一貫性が保たれます。これは私がお勧めするものです。

于 2013-07-01T17:18:59.190 に答える
0

データベース プロバイダーを変更するつもりがなく、ビジネス レイヤーが開発者を保護する ADO.net スキルを持っている場合、ビジネス レイヤーは必要ありません。

しかし、ビジネス ロジックをどこに配置するのでしょうか。

于 2013-07-02T10:33:42.567 に答える