我支持并开发一个大型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。
答案 0 :(得分:1)
我们的应用程序使用这种精确的层结构已经生产了8年以上,最初是基于Microsoft参考应用程序设计的。
这个分层系统使我们能够轻松添加Web客户端,服务界面(用于处理传入的电子邮件),赢取表单客户端,Windows平板电脑客户端,以及最近支持几乎直接端口到单声道以创建iPad客户端。
所有客户端共享BLL并通过.Net远程处理或WCF与DAL通信。这种方法还允许我们在多个物理服务器上分发Web客户端和DAL,以便处理大量用户。