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