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(哪个选项更合适?我想这在某种程度上取决于问题域。

4

3 回答 3

1

如果你有直接调用数据层的正当理由,那就去做吧。如果您在业务层中添加一个传递函数,那么您所做的只是添加更多代码而没有明显的好处。

现在,如果您的业务层是通过接口公开的,例如IBusinessLayer ,那么向它添加一个ProcessAllPersons()函数并将调用直接传递给数据层更有意义和一致性。这是我会推荐的。

于 2013-07-01T17:18:59.190 回答
0

如果您不打算更改您的数据库提供程序,并且您拥有业务层可以保护开发人员免受 ADO.net 影响的技能,那么您就不需要业务层。

但是,您要将业务逻辑放在哪里?

于 2013-07-02T10:33:42.567 回答
0

业务层应该引用数据层

这是一种方法,但如果您的目标是实现模块之间的最大解耦并且能够在不触及业务层的情况下轻松更改数据访问层(这称为持久性无知),那么这可能不是最好的方法。

看看洋葱架构和/或六边形架构。这些架构风格强调您的业务层是系统的核心并且独立于任何其他层。

具体来说,它的工作原理是在业务核心中为数据访问对象定义抽象,这些抽象将在外围模块中实现并由应用层使用。

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

http://alistair.cockburn.us/Hexagonal+architecture

http://blog.kamil.dworakowski.name/2010/08/from-layers-to-hexagon-architecture.html

于 2013-07-02T09:39:54.327 回答