3

以下のリンクで見ることができる 3 層アーキテクチャを実装しました。

http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx

上記の例では、DataTable を sqldatasource として使用し、以下のコードでグリッドビューにバインドします。

GridView1.DataSource = Client.GetClients();
GridView1.DataBind();

ただし、私のデータソースはデータテーブルではなく、編集、削除、および更新できる通常の sqldatasource です。どうすればプレゼンテーション レイヤーから分離できるのか、それとも本当に分離する必要があるのか​​ わかりません。ここに私のsqldatasourceのコード:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDbConn %>"
    DeleteCommand="DELETE FROM [OrderDetail] WHERE [RowNo] = @RowNo" InsertCommand="INSERT INTO [OrderDetail] ([FileNo], [PONumber], [MaterialCode], [MaterialDescription], [MaterialCategory], [UnitOfMeasure], [Quantity], [ContainerType], [LoadingDate]) VALUES (@FileNo, @PONumber, @MaterialCode, @MaterialDescription, @MaterialCategory, @UnitOfMeasure, @Quantity, @ContainerType, @LoadingDate)"
    SelectCommand="SELECT * FROM [OrderDetail]" UpdateCommand="UPDATE [OrderDetail] SET [FileNo] = @FileNo, [PONumber] = @PONumber, [MaterialCode] = @MaterialCode, [MaterialDescription] = @MaterialDescription, [MaterialCategory] = @MaterialCategory, [UnitOfMeasure] = @UnitOfMeasure, [Quantity] = @Quantity, [ContainerType] = @ContainerType, [LoadingDate] = @LoadingDate WHERE [RowNo] = @RowNo">
    <DeleteParameters>
        <asp:Parameter Name="RowNo" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="FileNo" Type="Int32" />
        <asp:Parameter Name="PONumber" Type="String" />
        <asp:Parameter Name="MaterialCode" Type="String" />
        <asp:Parameter Name="MaterialDescription" Type="String" />
        <asp:Parameter Name="MaterialCategory" Type="String" />
        <asp:Parameter Name="UnitOfMeasure" Type="String" />
        <asp:Parameter Name="Quantity" Type="Int32" />
        <asp:Parameter Name="ContainerType" Type="String" />
        <asp:Parameter Name="LoadingDate" Type="String" />
        <asp:Parameter Name="RowNo" Type="Int32" />
    </UpdateParameters>
</asp:SqlDataSource>
4

2 に答える 2

3

SqlDataSource は 3 層アーキテクチャに適合しません。それはあなた次第です。分離する必要はありませんが、ここで適切な 3 層アーキテクチャが必要な場合は、CRUD 操作を使用して、データ層にある種のデータベース処理クラスが必要です。

リンクした記事はこれを明確に説明しています。DataTable を使用したくない場合は、独自の POCO オブジェクトを作成して、次のようなデータを処理できます。

public class Order {... }

ビジネス層の方法は次のようになります

List<Order> GetOrders(...) {...}

とデータ

//CRUD naming convention
List<Order> ReadOrders (...)  {...}
于 2012-09-07T17:47:11.067 に答える
2

上記のローランドの答えはすでに対処しています:-

  1. SQLDataSource を使用するときにそのような分離がないため、階層化されたアーキテクチャ ( DAL / BL / UI の分割を想定) が SQLDataSource の使用とどのように結びつかないかについてのポイント。
  2. POCO / Datatablesを使用してSQLDataSouceを使用せずに分離する方法

あなたの質問の最後の部分について0.02ドルを差し上げます:-

  1. 本当に分けるべき?

まあ、最も現実的な答えのように。場合によります。

それは次のようなものに依存します - 3 層アーキテクチャを持つ主な理由は何ですか? このような設計の利点には、保守性の向上、テストの容易性、スケーラビリティの向上などがあります。逆に、SQLDataSource を使用すると、開発がスピードアップする場合があります。

私の個人的な経験では、通常、上記の理由のいくつかのために階層化された設計を使用することをお勧めします。そのため、通常は SQLDataSource の使用を避け、SQLDataSource の開発速度の利点でさえも、CodeSmith のようなコード ジェネレーターを使用することで無効にすることができます。 . したがって、長期的には SQLDataSource を使用する利点はまったくありません

于 2012-09-10T04:07:19.847 に答える