程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET合理充分利用DataSourceControl

ASP.NET合理充分利用DataSourceControl

編輯:關於ASP.NET

由於平常我寫博客並沒有太多的耐心和持續性,三分鐘熱度要過了就不了了之了,所以雖然現在比較晚了(剛過0點),但為了這篇博客能夠最終成型,還是決定連夜把這篇博客趕出來。

近一段時間以來,我發現博客又掀起了新的一輪討論熱潮,特別是針對WebForm和MVC的討論。這樣的討論可以促進大家的進步,同時也可以讓每個人對每種技術的了解都更加深入。不同的技術都有自己的最佳實踐,比如WebForm和MVC。如果我們大家在平常的開發實踐中都能遵從每一種技術基本使用原則,而不是濫用,那麼我就不信不會得到最佳效果。

這裡,我要討論的是如何合理的利用DataSourceControl,來簡化我們在頁面的一些數據操作,代替一部分的參數處理工作,並最終取代頁面的後台代碼文件。這個思路,源於在asp.net Blogs的一篇文章(我目前已經找不到該文章的鏈接的,大概意思就是講如果利用DataSourceControl來封裝一些復雜的數據處理)和NBearDataSource的基礎上提出來的,目前已經應用了一個網站項目的開發,並且自認為這是一種值推薦的WebForm開發方式。

在ASP.NET 2.0中,提出一種新的數據綁定方式,都就是使用DataSourceControl控件來查詢數據,而數據控件本身只要指定DataSourceID即可以與DataSourceControl關聯,而DataSourceControl本身會調用會根據不同的實現的自動進行參數的指定和查詢的工作。在ASP.NET 2.0,內置提供了ObjectDataSource,SqlDataSource和AccessDataSource。可以說,我們經常使用的都會是ObjectDataSource,但是由於功能限制的原因,很多情況下都還比較復雜。這時如果僅限於使用系統提供的DataSourceControl,那它的功能基本就廢了。

我對DataSouceControl的實踐是將不同模塊(或數據查詢)統統封裝成一個一個的DataSourceControl。DataSourceControl的基類可以是ObjectDataSource,也可以是直接從System.UI.DataSourceControl繼承而來,在抽象方法的基礎進行實現。但是建議還是要一個處理公有邏輯的DataSourceControl基類,比如如果你使用NBear解決方案,那麼你可以從NBearDataSource繼承而來;或者如果你使用LINQ,則可以創建一個LINQDataSource。以NBearDataSource為例來解析這樣做的好處:

1)在NBearDataSource中,對數據的查詢,我們只要指定實體類型,然後根據條件參數生成WhereClip,然後調用NBearDataSource.Filter方法,即可完成一個簡單實體的查詢。不需要調用Gateway查詢接口。

2)在NBearDataSource中,在數據提交時(新增和修改)轉入的數據賦值到對應的實體對象中。比如如果你使用FormView與DataSourceControl結合使用進行新增修改數據,那麼FormView裡提交的字段,你就不需要一個一個的去從輸入控件中去獲取,使用Bind雙向綁定,在DataSourceControl就可以得到所有輸入字段值。而NBearDataSource更是會把所有提交的字段,都給我們賦值到一個指定的實體對象中,直接就可以保存到數據庫了

3)每個DataSourceControl,根據自己的功能不同,可以靈活進行修改的控制。並作為頁面,與邏輯服務的橋梁。

在這樣的實踐中,DataSourceControl是整個數據展示的核心,也是一個橋梁。可能相當於MVC中的C吧。但是這在網站型的項目當中應用有以下一些優勢:

1)它可以與任何的數據綁定控件緊密的配合,在最合適時間進行數據的查詢和綁定工作,不需要用戶用工干預。防止了很多情況下重得綁定的可能。

2)使用DataSourceControl,可以讓後台很多為了數據綁定而寫的代碼,包括分頁代碼,統統退休。

3)使用DataSourceControl,可以方便的讓某一部分數據在不同的頁面進行復用,而不用提供復雜的查詢條件和所需的查詢接口調用。

4)DataSourceControl可以封裝查詢參數的傳遞。比如你的查詢參數是從URL而來,那麼你完全就可以把參數的處理交給DataSourceControl了。

5)DataSourceControl在數據提交時字段的自動映射方面非常的有優勢。

6)DataSourceControl非常靈活,如果我們的頁面外觀上不需要變動,只是在數據源需要進行一些修改,那麼這時只需要修改DataSourceControl即可。

這樣做以後,項目中可能會有很多DataSourceControl,但是同時我們可以減少的是頁面後台代碼,讓偶爾的一些服務器代碼寫在aspx文件中,讓頁面更易於維護,不用編譯就可以生效。同時如果你把DataSourceControl放在一個獨立的Library中,那它的復用就更加的容易了。

同樣的,這樣模式也不是到處都能用的。只適用於WebForm的數據綁定控件。(對於數據綁定控件的性能我就不再多說了。老趙已經解釋了非常清楚了,重復一點數據綁定控件生成HTML的性能完全沒有問題,特別是它的組件化的思想非常的優秀。)

最後,給出一種最為簡單的復用。比如你的項目中有很多的枚舉類型,在頁面上你要顯示這些枚舉可能會需要一些代碼。這時候我們可以寫一個EnumDataSource,只要在頁面上給EnumDataSource指定一個枚舉的類型,這時由EnumDataSource去讀取枚舉相關的名稱,值和中文描述。對於所以有的枚舉都使用EnumDataSource來綁定,不管是DropDownList還是CheckBoxList,那麼你是不是覺得的非常的簡單呢?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved