加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
新一代 .NET Framework 4.0的4大主軸(4)
把Dynamic Data整合到Web Forms
文/董大偉

Dynamic Data技術從.NET 3.5時代出現之後,就受到了不少開發人員的關注,其中DataAnnotations機制及相關的概念,也擴展應用到了MVC和Silverlight應用程式開發中,讓前端使用者介面與後端資料庫徹底隔離。最新的ASP.NET 4.0,Dynamic Data技術甚至可直接整合到傳統Web Forms中,對於需要設計大型資料庫應用系統的開發人員來說,將會有相當大的助益。

在ASP.NET 4當中的Dynamic Data技術,可以建立所謂的Data-Driven Applications,其中的DataAnnotations Attribute、Control Template、Field Template等機制,讓開發人員可以透過模板建立可在不同資料庫(表)正常運行的Web應用程式,不需再像過去ASP.NET Web Forms的資料庫存取機制,還必需再重新截取資料結構或重新設計Template Field。

舉個較實務的例子,專案中常會需要針對不同資料表建立CRUD(Create、Read、Update、Delete)等功能,如果能夠用一個相同的模板,在面對不同資料表時可以完全不需要修改程式碼,即可正常運作,豈不是相當便利!

過去ASP.NET透過FormView、DetalsView等控制項開發出來的網頁恐怕不可能做到,而Dynamic Data Web Site則是針對這需求而來,這就是Dynamic Data技術將提供給開發人員的好處。

此外,也提供支援新的Display Attribute,以及針對ADO.NET Entity Framework中的Many-to-Many Relationships的支援,甚至相容於既有的程式中,均讓Dynamic Data技術可以更廣泛的應用在已開發的專案當中。


讓現有網站支援Dynamic Data機制
以往要建立一個所謂的ASP.NET Dynamic Data應用程式,等於要把過去建立好的網站砍掉重練,對於開發人員來說恐怕相當為難,或許也因為如此,Dynamic Data Web Site這個功能一直都無法得到開發人員的重視與利用。

有鑑於此,在這次新版的ASP.NET 4.0當中,我們可以針對傳統的Web Forms型態網站,直接加入Dynamic Data支援,讓DetailsView、GridView之類的控制項可以直接享有DataAnnotations所帶來的種種好處。

舉例來說,我們可以讓過去相當熟悉的DetailsView直接加入Dynamic Data支援,透過DetailsView控制項新支援的EnableDynamicData方法,即可讓使用者介面的呈現直接參考Customers物件的MetaData。

請注意,Customers物件是透過LinqToSql建立Data Model中的資料表,也就是Entity。開發人員可以在Visual Studio 2010當中,輕易的透過Designer來設計這些Entity。(圖1)

圖1:透過LinqToSql建立Data Model的資料表。


完成之後,Visual Studio 2010會自動產生需要的指令碼。但這樣建立好的Entity並沒有經過DataAnnotations的修飾,所以欄位名稱以及驗證方式都尚未建立。因此,要為該Entity建立相對應的 Metadata,用來描述Customers中的欄位的呈現方式以及驗證機制。

建置並執行結果如圖2,呈現出的DetailsView就是透過CustomerMetadata所描述的結果,不僅欄位的標題就是在[Display(Name = "…", Order = …)]修飾字中所撰寫,欄位也依照Order參數的順序排列。而且你會發現ReadOnly和Required修飾字都各自發揮了效果,如果使用者沒有輸入客戶名稱,還會出現我們在CustomerMetadata中所描述的錯誤訊息!

圖2:此DetailsView即透過CustomerMetadata所描述的結果。


上述的動作,把資料在使用者介面層的呈現與驗證方式,都撰寫在CustomerMetadata中(Model層),用意在於:
1.使用者介面層(上例中是DetailsView),與繫結的資料(Customer資料表)完全無關,將兩者之間的相依性降到最低。程式碼給DetailsView什麼樣的DataSource,DetailsView就會忠實且自動地呈現出相對應的欄位。
2.DetailsView在呈現(或處理)資料時,將會參考CustomerMetadata中所描述的DataAnnotations修飾字,由修飾字決定資料在DetailsView中的呈現方式和驗證方式。
3.由於DataAnnotations撰寫在CustomerMetadata中,Entity若有微幅修改(或透過Designer重新截取或設計欄位),也不會需要完全重新建立Metadata。 千萬別小看這樣的功能,如此一來,整個DetailsView的繫結對象完全依照程式碼中的DataSource來決定,就可以用同一個.aspx頁面維護所有的資料表了,再也不需要針對每一個資料表設計一組DetailsView及一個.aspx頁面。

這整個架構就是Dynamic Data的核心精神,此概念也同時影響了MVC以及Silverlight應用程式,如今的Silverlight應用程式中也開始廣泛使用DataAnnotations技術了。


ASP.NET 4.0中的Dynamic Data應用程式
整個Dynamic Data應用程式的重點在使用者介面層與Data Model脫鉤,讓相依性降低到接近零,如此一來,就可以用同一套模板維護各種不同的實體(Entity)對象,也就是說,寫一套模板就能處理各種不同資料表。

當你在Visual Studio 2010當中建立Dynamic Data應用程式之後,會看到專案結構如圖3。其實整個重點在Templates,在這幾個資料夾底下,已經包含了各式各樣的預設模板,透過這些模板已經可以應付絕大部分的需求。因此當你建立好DynamicData專案,並設置了DataModel之後,不須撰寫任何一行程式碼,即可出現資料表的編輯畫面。

圖3:Dynamic Data應用程式專案結構。


如圖4,每一個各種不同形式的欄位,是依照資料型別自動產生的,欄位的模塊就是定義在FieldTemplates裡面的每一組.ascx檔案。當然輸入欄位前的標題以及驗證方式,都可以透過我們撰寫在Metadata裡面的DataAnnotations修飾字來定義。

圖4:自動產生不同形式的欄位。


此外,4.0版當中還針對Field Templates增加了URLs與E-mail Addresses模塊,一樣只需要透過修飾字來設定即可使用。


結語
進入到ASP.NET 4.0時代,Dynamic Data技術增加如DataAnnotations機制,確實讓開發人員對於建構大型資料庫Web應用程式有了更好的選擇。凡此種種,足以發現微軟在Dynamic Data技術上所注入的投資,同時也是開發人員值得關注的部分。