介紹了SubSonic,一個資料層構建器
導言
一 個易維護的應用程式,不同的類之間有不同的分工,通常分為介面層、業務層和資料訪問層。雖然這一技術有利於更好地組織應用,一些開發人員不願這麼做。建立 一個可靠的和快速的資料訪問層需要一些規劃,一旦你建立了一個,他們看起來都是相似的。SubSonic協助你基於資料庫自動建立資料庫訪問層。
SubSonic是什嗎?
SubSonic是一個資料訪問構建器。他還是一個auto-magic 的對象關係映射(ORM)工具,協助你快速建立一個網站。
像吹噓的那樣,SubSonic能做什麼工作,怎麼能協助你更快的建立應用程式?SubSonic通過讀取你的資料庫的結構,並為你構建快速,靈活的資料 訪問層類。他只需要很少的配置,為你提供了不同的方法查詢和儲存資料,並提供方法給你定製以適應你的開發風格。SubSonic受到Rub on Rails的ActiveRecord的啟發,不過SubSonic是一個純粹的.NET組件。
SubSonic配置
和其它的ORM比較,SubSonic需要的配置很少,最小要求是將下列配置添加到web.config(app.config)檔案:
一個或者多個資料庫連接串
一個SubSonic配置節
串連適當的資料庫連接到SubSonic
就是這麼簡單-沒有必要關心要那些表或配置表和對象的映射關係。在實踐中,配置看起來如下:
<configuration> <!-- 1 - Connection String(s) --> <connectionStrings> <add name="Northwind" connectionString="Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True"/> </connectionStrings> <configSections> <!-- 2 - SubSonic section handler --> <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic"/> </configSections> <!-- 3 - Point SubSonic at the appropriate data source(s) --> <SubSonicService defaultProvider="Northwind"> <providers> <add name="Northwind" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="Northwind" generatedNamespace="Northwind"/> </providers> </SubSonicService> </configuration>一旦你配置你的應用程式,你可以產生你的資料訪問層的使用SubSonic命令列工具/圖形介面工具。另外,如果你使用asp.net ,你可以用建立供應商,以動態產生的資料層。你可以使用命令列工具(足夠令人驚訝)命令列,但它是更容易打造出一個新的外部工具(見圖表1)產生類。 圖2顯示所產生的類。 圖1 :配置命令列工具
產生的類是一些物理檔案,你可以看看,學習,當你不應該改變這些檔案,任何改變都會在再次產生資料層時被覆蓋,所有的產生的類都是部分類(partial),你可以把你自己的擴充代碼放在你自己添加的檔案中。為了避免編輯這些檔案,你可以用構建提供器自動產生這些類。
為了使用構建提供器,你需要在web.config加類似下面的配置
<configuration> <system.web> <compilation> <buildProviders> <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/> </buildProviders> </compilation> </system.web> </configuration>上述配置是構建提供器處理任何在App_Code目錄下以.abp結尾的檔案,這和自訂的DataSet在App_Code目錄添加一個XML Schema非常相似。構建提供器只需一個以.abp的檔案,不需要寫任何文字。當應用程式構建的時候,和命令列工具一樣產生了哪些類,唯一不同的是你看 不到那些檔案。
擷取資料
一旦你用SubSonic建立了資料訪問層(DAL),無論是使用代碼產生器還是BuilderProvider,你隨時可以查詢你的資料庫,目前SubSonic支援下列資料庫
微軟SQL SERVER 2000或2005,包括Express版本
Oracle
MySQL
SQLite
SubSonic為你的資料庫裡的每個表產生三個類:
表名奇數形式的類;例如有一個表Products,類名就是Product,這是一個強型別的類代表資料庫表中的一行資料,表中的每一列對應類中的強型別的屬性名稱,允許null的欄位定義為nullable
集合類:例如一個表Products,你將得到ProductCollection 類,這個類提供了好多方法處理資料庫的資料
一 個控制器(如ProductController):這提供了準系統(建立,檢索,更新和刪除)。 而Product和ProductCollection 能裝載自己,是ProductController是專為這些任務而設計的。此外,你可以把控制器作為資料來源,為您的網頁使用 ObjectDataSource控制項。
強型別類讓你可以用多種方法查詢資料庫,這取決於你的需要。下面是幾種查詢:
簡單的查詢集合
PostCollection posts = new PostCollection().OrderByDesc("PostedOn").Load()複雜查詢
Northwind.CustomerCollection customers = new Northwind.CustomerCollection() .Where("Country", "Canada") .Where(Northwind.Customer.Columns.Region, "BC") .OrderByDesc(Northwind.Customer.Columns.PostalCode) .Load();查詢單個對象
if(!string.IsNullOrEmpty(Request.QueryString"id") ){ int id = Int32.Parse(Request.QueryString"id") ; post = new MyBlog.Post(id); }下列關係
Northwind.Customer.FetchByID("BOTM") .Orders()0 .OrderDetails()0 .Product .ProductName;產生的類為你提供了一個充分的方法進行查詢,通過Where條件,Order by排序,甚至布爾運算。 你可以查詢強類對象或集合,一個DataSet,或IDataReader,這取決於您的需要。
除了以強型別類,SubSonic 還包括一個通用的查詢工具,創造性地稱為Query。 You can use this to perform ad hoc queries of your database.你可以使用它從你的資料庫臨時性的查詢。
Query q = Product.Query() .WHERE("UnitPrice > 50") .AND(Product.Columns.ProductName, Comparison.Like, "S%") .BETWEEN_VALUES("CategoryID", 1, 2) .ORDER_BY("ProductName"); this.ProductGrid.DataSource = q.ExecuteReader();上面的例子中使用了產品類進行查詢。 你可以也這樣做,這所建立的查詢使用代碼如下:
Query q = new Query(Product.Schema) ... //as before每一種方法在查詢返回一個查詢對象。這使您能夠串起來,因為要找回你需要的資料。SubSonic 產生對象的效能是好的- 比自訂的DataSet快。 因此,你使用SubSonic不會犧牲效能。
等等,還有更多...
除了上述資料存取功能,SubSonic,還包括一些控制項,使的操作資料更加容易。
最具dramatic 隨SubSonic 發布的是腳手架控制項。像施工的工地上的腳手架,或Ruby on Rails的腳手架,其用意是為您提供一種簡單的方法來做些事情。 在SubSonic,腳手架可以輕鬆編輯資料表。
<subsonic:Scaffold ID="ProductsScaffold" runat="server" TableName="Products" />腳手架控制項就會使本身作為一個table呈現(見圖5 )並且可以編輯現有條目或增加新條目。
選擇一個條目進行編輯形成一個表,並提供適當的編輯控制項。 正如您所看到的,從圖6 ,Posted On欄位建立了一個日曆控制項,並且Body欄位得到多行TextBox控制項。
此外SubSonic腳手架控制項還包括QuickTable控制項,其中顯示的資料是Grid格式,日曆控制項可以允許輸入一個日期,和一個ManyToMany控制項可協助你編輯相關列,每一項都可以了,看起來非常不錯,但還有括了一些控制項的CSS樣式元素的需要設定。
它同時還具有牛排刀...
用SubSonic,你可能忽視了名字空間SubSonic.Sugar ,但如果你這樣做,你錯過了一些有用的特性。SubSonic.Sugar 沒有迷人的功能,而是它提供的"雜項"的功能包括特性為:
檔案操作,如在一個請求開啟和閱讀檔案。
日期操作,如確定兩個日期之間有多少工作日。
字串操作,例如轉換,以適當的情況下,或剝HTML格式。
數字操作,如確定如果一個數字是不是整數。
Web操作,如開啟和閱讀一個網頁,或執行DNS尋找。
驗證操作,其中包括通用簽證,萬事達卡和其他常見的信用卡驗證。
擴充SubSonic
沒有應用能夠提供滿足所有需求的解決方案,因此,使用SubSonic所產生的類是不夠的。您可能要像產生的類中添加方法,或者你可能要改變產生的類。 SubSonic滿足這兩方面的需要。
所有的SubSonic產生的類都是局部類。這意味著你可以增加功能到另一個檔案,而類的名字時一樣的。 如果你不喜歡SubSonic所產生的類,你可以重寫模板,模板是asp.net頁面。
總結
你 知道你有一個資料庫,你需要串連到一個應用。你知不知道在頁面中直接發送SQL的請求是一個壞的架構。 你知道你應該為你的應用寫一資料層管理CRUD。 你真的想要得到這一切,現在做的,那你可以回家享受天倫之樂。 幫您解決所有這些在優點於一體,而不犧牲效能,可維護性和靈活性。 現在就去下載它並給它一個嘗試。 你的應用會謝謝你的。