大規模な 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 を使用しています。 .