程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Provider Model 模式

Provider Model 模式

編輯:.NET實例教程
     這篇文章的思想的來源是Rob Howard半月前的一篇文章,《Provider Model Design Pattern and Specification, Part 1》,本來想等Rob H把Part II寫完然後再一起總結一下的,可等啊等啊,估計這位哥們兒在忙著准備DevDay2004和做演講,所以一直都沒有等到Part II出來。不過Rob Howard在MSDN上的文章從來都是精品,而且這篇文章之前很長一段時間,由於忙著Whidbey的開發,Rob H已經很久時間沒有在MSDN上的專欄撰寫文章了,所以這篇文章出來的時候甚至被MS的人士稱為“Return of the King”,呵呵。
  
  
  
  言歸正傳。所謂Provider Modal,基本上都是指的“DataSource Provider Modal”。它是一種讓你能夠方便的提供多種數據源,並可以“動態”的在各個數據源間進行切換的一種模式。
  
  
  
  在ASP.NET 2.0中,大量采用了Provider Modal模式。比如,Personalization和Membership是ASP.Net提供的內置的能夠給開發人員極大方便的特性,它們能夠自動保存用戶的個性化信息,和維護站點用戶信息。它們都需要一種存儲方式,就是說,需要找一個數據源來保存他們的數據。但是這個數據源的提供方式,需要有非常大的靈活性、伸縮性、可定制性。比如,我的服務器可能沒有安裝SqlServer,只安裝了MySQL,但是我希望不管我的實際的數據庫是什麼類型(或者根本就沒有條件安裝大型數據庫,而只能提供Access的方式進行保存),都能夠作為Personalization和Membership所能使用的數據源,都能保存它們需要保存的數據。
  
  
  
  這個時候,Provider Modal模式就可以大展身手了。首先,MemberShip對於能夠保存它的數據的Data Provider提出一個要求,比如必須實現IMembershipProvider接口,而這個接口裡面定義了保存MemberShip系統中的數據所需要實現的所有方法,比如“CreateUser(String username, String password, String email, out MembershipCreateStatus status)”用來創建新用戶,“Boolean ChangePassoword(String name, String oldpassword, String newpassWord)”用來修改用戶密碼。我們要做的,就是針對MySql寫一個MySqlMembershipProvider,實現IMembershipProvider要我們實現的所有接口,然後在web.config文件將我們寫的這個MySQLMembershipProvider指定給MemberShip用。而對於MemberShip系統來說,它不用關心倒是是誰實現了IMembershipProvider,它只是根據web.config裡面的設置,載入那個具體的實現IMembershipProvider的對象,然後調用IMembershipProvider定義的接口方法就可以了。這樣我們就擁有了極大的靈活性,可以根據自己的要求定制滿足自己需要的Data Provider。
  
  
  
  上面所說的,就是Provider Modal模式了。在很多的場合,在我們需要一個很大的靈活性的數據存儲方式多樣化的場合,我們可以應用這個模式,讓我們的系統變得靈活而具有可擴展性。能夠想到的包括Log紀錄、Cache保存、用戶State狀態保存等等,只要我們開始做的時候就明智的應用Provider Modal模式,那麼也就給了以後擴展的機會。
  
  
  
  好像很簡單,呵呵,但是掌握更多的實現規范才能更好的實現它。更多的細節和實現規則,請參看Rob Howard的文章。上面ASP.NET 2.0 Personalization和Membership特性,來自《A First Look At ASP.Net 2.0》。
  
  
  
  現在就可以得到的Provider Modal的極佳范例,ASP.Net Forum 2.0,現在仍處於Alpha階段,預計月底發布Beta和Final版本。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved