.NET设计模式(层)

时间:2012-07-29 19:19:09

标签: asp.net .net design-patterns

我支持并开发一个大型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

1 个答案:

答案 0 :(得分:1)

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

这个分层系统使我们能够轻松添加Web客户端,服务界面(用于处理传入的电子邮件),赢取表单客户端,Windows平板电脑客户端,以及最近支持几乎直接端口到单声道以创建iPad客户端。

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