0

5 つのテキスト ボックスがあるフォームがあり、データベースからデータを取得して、その 5 つのテキスト ボックスにそのデータを設定する必要があるとします。

したがって、3 つの基本レイヤーがあるとします。

  • default.aspx ページの分離コード

  • DAL に接続する BLL クラス

  • およびデータ アクセス レイヤー (DAL)

しかし、default.aspx ページは sqldatareader について認識してはならないということを聞いて読んだことがあります。実際には、おそらく sqlclient 名前空間を default.aspx 分離コード ページに追加したくないでしょう。

だから私はこのようなことをしていました:

protected sub DisplayCustomerData()

Dim s as SqlDataReader
Dim b as BLL

b=new BLL();
s = b.GetCustomerData();

//then take s and simply set each text field
if s.read()
TextBox1.Value = s("MyField1")
end if
end sub

次に、BLL は単純に DAL を呼び出して SQL Server のストアド プロシージャを呼び出し、CommandObject.ExecuteReader を実行し、結果を取得して BLL に戻し、BLL はそれを default.aspx のコード ビハインド ページに送信します。

それが意味をなさない場合は、完全なソース コードを提供できます。私の質問は、default.aspx が実際に SQL データ リーダーを宣言して認識していることが悪い場合、これを行うためのより良い方法は何ですか? インターフェイス コードに sqldatareader が含まれないようにするには、どのデータ型を使用する必要がありますか?

4

2 に答える 2

4

関心の分離を実際に行わずに、複数のレイヤーを導入しました。フロントエンドでSqlDataReaderを使用すると、データの取得方法に関する知識が多すぎます。

通常、取得したデータを含む顧客ビジネスオブジェクトまたはデータ転送オブジェクトがあります。DALは、SqlDataReaderへの参照ではなく、Customerタイプのオブジェクトを返します。

protected sub DisplayCustomerData()

    Dim customer as Customer
    Dim b as BLL

    b=new BLL();
    customer = b.GetCustomerData();

    If Not customer is Nothing Then
        TextBox1.Value = customer.MyField
    End If
end sub

アップデート:

あなたの例でBLLと呼んでいるものは、実際には何もしません。データへのアクセスとそのデータの表示だけがあります。DAL自体がCustomerオブジェクトを作成します。

使用方法bは、実際にはデータアクセスオブジェクトです。それは実際にはビジネスロジックとは何の関係もありません。ビジネスロジックは、過去の注文に基づいて、この顧客が受け取る割引率を決定するようなものです。

于 2009-10-30T12:42:38.930 に答える
0

レイヤーはカプセル化に関するものです。多層アーキテクチャの考え方は、懸念を別々のカプセル化された層に分離することです。

データ アクセス層

データ アクセスの実行方法に関するすべての情報をカプセル化します。データ アクセスがどのように実行されるかを示す型を受け入れたり返したりしません (つまり、データ リーダー、データ セットなどを受け入れたり返したりしません)。その仕事は、オブジェクトを保持して取得することです。理想的には、データ アクセス レイヤーを、同じコントラクトを持つがまったく異なる永続化メカニズムを使用するものと交換できる必要があります。

ビジネスロジック層

ドメインに関係なく、ビジネス ロジック機能を実行します。データの取得方法は気にせず、呼び出し元が Web サイト、Web サービス、Windows フォーム アプリケーションなどであるかどうかもわかりません (つまり、UI オブジェクトを処理しません)。

プレゼンテーション層

API や Web サイトなどの形式であるかどうかにかかわらず、ものの表示を扱います。適切な方法で記述した場合、ビジネス ロジック レイヤーを使用できる複数の並列プレゼンテーション レイヤーを使用できるはずです。この層は、データ アクセス層を呼び出しません。


これが実際に使用するレイヤー構造であるという特定の要件はないことに注意してください。これは、合理的に従来のものです。たとえば、キャッシュ管理などのために追加のレイヤーを挿入します。

于 2009-10-30T13:48:15.820 に答える