XCode是一個輕量級的ORM元件(對象與關系資料庫映射),提供以面向對象的方式操作資料庫的功能,能夠解決90%以上的資料庫操作場景。
做為X系列元件最重要的一員,XCode秉承了簡單實用的特點,力求以最簡單的做法,解決最普遍的問題。
XCode最大的“缺點”就是“不支援”多表查詢!為何不支援要加雙引号?那是因為XCode實際上支援多表查詢,隻是用起來非常複雜,也不容易講清楚,會嚴重影響基本功能的學習了解,是以逢人問到,我都回答不支援!至于缺點二字加雙引号,是因為XCode有一整套替代方案,在絕大多數情況上,更優于多表查詢。
說XCode,就不得不提開發模式。每一個ORM元件,都是在某一種開發模式下,才能表現得最出色,XCode也不例外,我們稱之為XCode開發模式。當然,每個人有自己的想法,有自己的開發習慣,可以嘗試根據自己的習慣去使用XCode,或者稍微修改自己的習慣,也許能有更精彩的用法。
XCode專注于對象與關系資料庫映射,内部明顯分為上下兩層:
1,下層以DAL作為入口,IDatabase作為接口,各種資料庫實作一個類,實作該接口以支援多資料庫。DAL的兩大代表是Select(查詢SQL,傳回DataSet)和Execute(執行SQL,傳回影響行數),并且以SQL為key,有一級緩存的支援。DAL還支援DbCommand的查詢和操作,不過就不受一級緩存的支援了。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMmNmVTN1MDOhRWM1I2MzU2NxMzN2QmZzYzNilDNiRTYfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
(DAL層結構圖)
2,上層以Entity作為泛型基類,所有實體類繼承于它。經典的LoadData能夠把DataSet或者DataTable轉化為實體對象集合,每行記錄執行個體化一個實體對象,每個表字段的值指派給實體對象的屬性。是以,完全可以以别的方式得到DataSet,然後利用LoadData将其轉為實體對象集合,而不一定需要DAL。可以得知,XCode支援視圖,複雜查詢或者多表查詢可以通過視圖變相解決,不過一般不推薦這麼做。增删改查等操作,XCode實際上通過實體類的中繼資料等資訊,動态拼接SQL,然後調用DAL層實作。
(加載記錄集和資料表)
(執行插入操作,先拼接SQL,再執行)
此兩層結構說明,實際上就是XCode核心原理,任何人都可以根據這個原理來實作自己的ORM。至于結果元件的優劣程度,就看各自的功力以及對細節的考慮了。
XCode的理念是以面向對象為本,是以于本對象有關的東西都寫在本對象内。是以XCode是一個充血模型。
所有查詢操作(例如Find、FindAll、FindCount)都是靜态方法,因為它與具體對象無關;而對象操作(例如Insert、Update、Save、Delete)都是成員方法,因為它與具體對象密切相關,代表着對具體對象的操作。這是XCode模型的基本思想,同樣,為實體類編寫業務代碼的時候,也應該嚴格遵循該原則,哪些應該是靜态的,哪些應該是成員的,要嚴格分開。
當然,XCode實體類也支援貧血模型的一些操作方式,隻不過操作類還是自身而已,比如Insert、Update、Save、Delete也有靜态方法,而參數就是實體類對象。
XCode的模型,還有一個很重要的意義,就是完全滿足資料源元件ObjectDataSource的要求,使得XCode實體類可以直接充當資料提供者。
(成對出現的FindAll/FindCount,參數完全一摸一樣,正是ObjectDataSource的要求)
本文僅是XCode的一個簡介,說明XCode的結構和開發模式,更詳細的說明請關注後文。
大石頭
新生命開發團隊
2010-08-20 00:36
我不相信神話,我隻相信汗水!我不相信命運,我隻相信雙手!