簡體   English   中英

.NET設計模式(層)

[英].NET Design Patterns (tiers)

我支持並開發一個大型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,而BLL層中將調用DAL中的getPerson。 我的問題是:這是一個好方法還是有更好的方法將此功能分解為多個層?

我看了以下鏈接,該鏈接在使用數據集時討論了這種方法,但是我沒有使用數據集,即我正在使用SQLCommands和SQLDataReaders: http : //msdn.microsoft.com/zh-cn/library/aa581779.aspx

我們已經使用此確切的層結構將應用程序投入生產8年以上,該結構最初基於Microsoft參考應用程序設計。

這個分層的系統使我們能夠輕松地添加Web客戶端,服務界面(用於處理傳入的電子郵件),Win Form客戶端,Windows Tablet客戶端,並且最近支持幾乎直接連接到Mono的端口來創建iPad客戶端。

所有客戶端共享BLL,並通過.Net遠程處理或WCF與DAL通信。 這種方法還使我們能夠在多個物理服務器之間分布Web客戶端和DAL,以處理大量用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM