2012-08-08 41 views
3

我已經實現了3層arhitecture它可以在下面的鏈接的GridView在3層架構複雜的SqlDataSource

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

在它上面的例子可以看出使用一個DataTable作爲SqlDataSource和它結合具有以下代碼的gridview。

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> 
+0

這看起來不像MVC類型的體系結構嗎?你必須把東西放在選擇,其他不能綁定 – 2012-08-29 19:14:52

回答

3

SqlDataSource不適合3層架構。 這取決於你如何做到這一點。你不必分開它,但是如果你想在這裏有一個合適的3層體系結構,你需要在你的數據層使用CRUD操作來處理某種類型的數據庫處理類。

您鏈接的文章清楚地說明了這一點。如果你不想使用的數據表,你可以創建自己的POCO對象來處理像

public class Order {... } 

數據你的業務層的方法看起來就像

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

和數據

//CRUD naming convention 
List<Order> ReadOrders (...) {...} 
2

羅蘭的回答如上所述: -

  1. 有關分層體系結構(假設DAL/BL/UI的分割)與使用SQLDataSource不相關的一點,因爲在使用SQLDataSource時沒有這種分離。

    1. 是否應該真的分隔 - :
    2. 你怎麼能不使用使用POCO的/數據表

    我會給我的0.02 $關於你問題的最後一部分SQLDataSouce分離出來?

那麼,像最現實的答案。這取決於。

這取決於這樣的事情 - 你有一個3層架構的主要原因是什麼?這種設計的一些優點包括更好的可維護性,更好的可測試性和更好的可擴展性。相反,使用SQLDataSource可以加速您的開發。

我個人的經驗是,由於上述原因,有一個分層設計通常是一個更好的主意,因此我通常會避免使用SQLDataSource,甚至可以通過使用代碼來取消SQLDataSource的開發優勢的速度像CodeSmith這樣的發電機。所以,我只是沒有看到任何長期使用SQLDataSource的好處