0

我支持和开发一个大型 ASP.NET 应用程序(我是唯一的开发人员)。我正在尝试通过使用设计模式来采用结构化的编码方法,但我还没有完全掌握这个主题。我正在考虑为用户界面使用 MVP 模式和数据层来分离业务逻辑和数据逻辑(总共两种模式)。例如,看看下面的代码:

Imports System.Data.SqlClient
Imports System.Web.Configuration
Partial Class _Default
    Inherits System.Web.UI.Page

    Private _ConString As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            If Session("OrderID") > " " Then 'Line 10
            Dim objDR As SqlDataReader
                _ConString = WebConfigurationManager.ConnectionStrings("TestConnection").ConnectionString
                Dim objCon As New SqlConnection(_ConString)
                Dim objCommand As New SqlCommand
                objCommand.CommandText = "SELECT * FROM Person WHERE ID = " & session("id") 'I know this could cause SQL injection attacks.  I wrote it quickly to get my point accross
                objCon.Open()
                objCommand.Connection = objCon
                objDR = objCommand.ExecuteReader
                Do While objDR.Read
                    MsgBox(objDR("name"))
                Loop
                objDR.Close()
    End If
        Catch ex As Exception
            Throw
        End Try
    End Sub
End Class

这打破了很多 SOLID 规则。表示层有数据逻辑和业务逻辑(第10行是业务逻辑)。

我正在考虑创建两个新类,即 PersonDAL(用于数据访问层)和 PersonBLL 用于业务逻辑层。业务逻辑层和数据访问层将具有相同的函数名称,即 getPerson(),即表示层将调用 BLL 层中的 getPerson,而后者将调用 DAL 中的 getPerson。我的问题是:这是一个好的方法还是有更好的方法将此功能分解为层?

我查看了以下链接,它在使用数据集时讨论了这种方法,但我没有使用数据集,即我使用的是 SQLCommands 和 SQLDataReaders:http: //msdn.microsoft.com/en-us/library/aa581779.aspx .

4

1 回答 1

1

我们的应用程序使用这种精确的层结构已经投入生产 8 年以上,最初是基于 Microsoft 参考应用程序设计的。

这种分层系统使我们能够轻松添加 Web 客户端、服务接口(用于处理传入的电子邮件)、win forms 客户端、windows 平板电脑客户端,并且最近支持几乎直接端口到 mono 以创建 iPad 客户端。

所有客户端共享 BLL 并通过 .Net 远程处理或 WCF 与 DAL 通信。这种方法还允许我们将 Web 客户端和 DAL 分布在多个物理服务器上,以便处理大量用户。

于 2012-07-29T19:27:30.757 回答