0

大規模な ASP.NET アプリケーションのサポートと開発を行っています (私は単独の開発者です)。設計パターンを使用してコーディングに構造化アプローチを採用しようとしていますが、まだ主題を完全に把握できていません。ユーザーインターフェースはMVPパターン、データ層はビジネスロジックとデータロジックを分離するパターン(計2パターン)を考えていました。たとえば、次のコードを見てください。

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 行目はビジネス ロジックです)。

私は 2 つの新しいクラス、つまり PersonDAL (データ アクセス層用) と PersonBLL (ビジネス ロジック層用) を作成することを考えていました。ビジネス ロジック レイヤーとデータ アクセス レイヤーは同じ関数名、つまり getPerson() を持ちます。つまり、プレゼンテーション レイヤーは BLL レイヤーで getPerson を呼び出し、BLL レイヤーは DAL で getPerson を呼び出します。私の質問は次のとおりです。これは良いアプローチですか、それともこの機能を層に分割するより良い方法はありますか?

データセットを使用する場合のこのアプローチについて説明している次のリンクを見ましたが、データセットを使用していません。つまり、SQLCommands と SQLDataReaders を使用しています .

4

1 に答える 1

1

Microsoft のリファレンス アプリケーションに基づいて最初に設計されたこの正確な階層構造を使用して、8 年以上にわたって運用されているアプリケーションがあります。

この階層化されたシステムにより、Web クライアント、サービス インターフェイス (受信メールを処理するため)、win フォーム クライアント、Windows タブレット クライアントを簡単に追加できるようになりました。最近では、iPad クライアントを作成するための mono へのほぼ直接的なポートをサポートしています。

すべてのクライアントは BLL を共有し、.Net リモート処理または WCF を介して DAL と通信します。このアプローチにより、非常に多数のユーザーを処理するために、Web クライアントと DAL を複数の物理サーバーに分散させることもできます。

于 2012-07-29T19:27:30.757 に答える