偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳談XCode學(xué)習(xí)基礎(chǔ)之ORM組件

移動(dòng)開(kāi)發(fā) iOS
本文介紹的詳談XCode學(xué)習(xí)基礎(chǔ)之ORM組件,詳細(xì)的介紹了xcode中的OML組件的你內(nèi)容,先來(lái)看內(nèi)容詳解。

詳談XCode學(xué)習(xí)基礎(chǔ)之ORM組件是本文熬介紹的內(nèi)容,之前,XCode總是若隱若現(xiàn),耐性好的同學(xué)想知道它還有啥特點(diǎn),沉不住氣的則認(rèn)為不過(guò)是CURD耳!不多說(shuō),先來(lái)看詳細(xì)內(nèi)容。

XCode開(kāi)發(fā)模式是靈魂,XCode組件通過(guò)具體實(shí)現(xiàn)對(duì)其支持!

XCode的特點(diǎn)如下:

1、基本的CURD功能

實(shí)在想不出來(lái)不支持CURD的ORM算不算ORM;也實(shí)在想不出來(lái)僅有CURD的ORM算不算ORM。因而,這是0號(hào)功能!

XCode的CURD通過(guò)反射實(shí)體類生成查詢和操作SQL實(shí)現(xiàn),數(shù)據(jù)庫(kù)結(jié)構(gòu)信息通過(guò)特性附在實(shí)體類上。之所以選擇SQL而不是DbCommand,因?yàn)閄Code的實(shí)體層和數(shù)據(jù)訪問(wèn)層是分開(kāi)的,目前是為了實(shí)現(xiàn)一級(jí)緩存,將來(lái)會(huì)在這里實(shí)現(xiàn)分布式數(shù)據(jù)訪問(wèn)。

2、完美支持ObjectDataSource

XCode實(shí)現(xiàn)充血模型(脹血模型)的實(shí)體類,提供ObjectDataSource需要的所有方法和參數(shù),特別支持分頁(yè)和排序功能!

詳見(jiàn)《與ObjectDataSource共舞》

3、全面分頁(yè)支持

只有從小處開(kāi)始培養(yǎng)分頁(yè)的思想,任何查詢都指定所需獲取數(shù)據(jù)范圍,才能保證系統(tǒng)數(shù)據(jù)變大時(shí)系統(tǒng)不會(huì)拓機(jī)。

XCode的分頁(yè)以任意查詢語(yǔ)句為基礎(chǔ),支持統(tǒng)計(jì)等非常復(fù)雜的查詢分頁(yè)。并且會(huì)根據(jù)當(dāng)前數(shù)據(jù)庫(kù)類型以及版本選擇最佳分頁(yè)方案。

詳見(jiàn)《撬動(dòng)千萬(wàn)級(jí)數(shù)據(jù)》

4、實(shí)體集合支持

實(shí)體集合EntityList<TEntity>繼承自List<TEntity>,提供了實(shí)體的批量操作。實(shí)際上還是通過(guò)遍歷集合逐個(gè)進(jìn)行實(shí)體操作,因?yàn)槌溲P偷膶?shí)體類可能是通過(guò)重載修改CURD的行為,所以不能使用一個(gè)SQL語(yǔ)句操作一批實(shí)體,XCode不會(huì)做這種可能會(huì)影響使用的小把戲。

實(shí)體集合還提供了一些方便查詢和排序的簡(jiǎn)便方法,實(shí)體緩存中將會(huì)大量使用。

5、萬(wàn)能的一級(jí)緩存

一級(jí)緩存由數(shù)據(jù)訪問(wèn)層實(shí)現(xiàn),以查詢SQL為鍵,返回的數(shù)據(jù)集為值,查詢的表名數(shù)組為依賴項(xiàng),進(jìn)行緩存。執(zhí)行SQL時(shí)同樣需要指定影響的表名數(shù)組,從而清空所有影響到的緩存。

緩存生命周期分為請(qǐng)求級(jí)、定期和永久三種。如果只有當(dāng)前應(yīng)用系統(tǒng)使用該數(shù)據(jù)庫(kù),并且服務(wù)器內(nèi)存足夠大,可以開(kāi)啟永久緩存,在數(shù)據(jù)沒(méi)有更新時(shí),基本緩存在內(nèi)存中,適用于網(wǎng)站;一般設(shè)定一個(gè)緩存過(guò)期期限,定期清理緩存,適用于內(nèi)存不是很足,或者允許數(shù)據(jù)更新有一定延后的分布式系統(tǒng);如果上面兩種均不合適,而又需要提高系統(tǒng)響應(yīng)速度時(shí),可以采用請(qǐng)求級(jí)緩存,在該次頁(yè)面請(qǐng)求生命周期內(nèi)對(duì)數(shù)據(jù)進(jìn)行緩存,特別適用于在不同地方進(jìn)行相同查詢的場(chǎng)合(有時(shí)候是程序員功力不夠?qū)戝e(cuò)的)。

XCode的開(kāi)發(fā)模式建議使用盡可能簡(jiǎn)單的單表查詢,實(shí)際大部分查詢都是簡(jiǎn)單SQL語(yǔ)句,緩存命中率很高!

6、漂亮的實(shí)體緩存

實(shí)體緩存又成為二級(jí)緩存。盡管有了一級(jí)緩存,但它只是緩存了數(shù)據(jù)集而已,使用的時(shí)候還是要加載數(shù)據(jù)集成為實(shí)體集合。

實(shí)體緩存通過(guò)指定一個(gè)查詢實(shí)體集合的方法,一般是查詢本表所有實(shí)體的FindAll()方法,把查詢返回的實(shí)體集合緩存起來(lái)(默認(rèn)緩存一分鐘),供上層代碼使用。取數(shù)據(jù)的過(guò)程完全是隱式進(jìn)行,實(shí)體緩存通過(guò)提供一個(gè)靜態(tài)實(shí)體集合供上層代碼查詢,實(shí)體集合屬性內(nèi)部進(jìn)行查詢數(shù)據(jù)和緩存過(guò)期檢查等操作。查詢方法通過(guò)委托傳遞,還有參數(shù)可以指定是否異步獲取緩存數(shù)據(jù)。

總之,使用實(shí)體緩存就是使用一個(gè)靜態(tài)的實(shí)體集合屬性(大多數(shù)時(shí)候使用默認(rèn)配置,所以不需要配置),進(jìn)行查詢排序等操作,無(wú)需關(guān)心緩存的具體實(shí)現(xiàn)。當(dāng)然,對(duì)實(shí)體進(jìn)行修改操作時(shí)將會(huì)清空緩存,保證數(shù)據(jù)的新鮮性。

單表數(shù)據(jù)量不大(建議1000以下,不超過(guò)10000),并且極少改動(dòng)的數(shù)據(jù)表使用實(shí)體緩存。比如權(quán)限、角色、菜單、系統(tǒng)參數(shù)等使用非常頻繁的數(shù)據(jù)。實(shí)體緩存的命中率可以高達(dá)99.98%

7、飄逸的單對(duì)象緩存

單對(duì)象緩存又層三級(jí)緩存,因?yàn)樗话銟?gòu)建于二級(jí)緩存之上。對(duì)于數(shù)據(jù)量大(大概幾萬(wàn)到幾十萬(wàn)),并且查詢又非常頻繁的數(shù)據(jù)表,任意兩行數(shù)據(jù)之間關(guān)系不大時(shí),可以酌情使用單對(duì)象緩存。比如會(huì)員表,一般會(huì)根據(jù)賬號(hào)進(jìn)行查找,并且很頻繁,此時(shí)可以以賬號(hào)為鍵,會(huì)員對(duì)象為值,對(duì)數(shù)據(jù)進(jìn)行緩存。設(shè)置與實(shí)體緩存類似。取數(shù)據(jù)時(shí)先去緩存中找,有則直接返回,沒(méi)有則調(diào)用預(yù)設(shè)的方法進(jìn)行查詢,并且緩存起來(lái)。

單對(duì)象緩存里面的實(shí)體對(duì)象,修改數(shù)據(jù)時(shí),如非必要,不要手工調(diào)用更新方法,單對(duì)象緩存有自動(dòng)保存的功能。該特性適用于更新非常頻繁的場(chǎng)合,比如在線用戶表,可以讓多次更新積累在一起,然后最后自動(dòng)更新一下。

8、出色的性能

XCode不支持多表查詢,一般的多表關(guān)聯(lián)查詢都可以拆分成為1+X的多次單表查詢。比如學(xué)生和班級(jí)的關(guān)聯(lián)查詢,可以先查10個(gè)學(xué)生信息,再分別查他們的班級(jí)信息,就成了1+10=11次單表查詢。每一次單表查詢肯定會(huì)比多表關(guān)聯(lián)查詢要快,但是11次單表查詢很多時(shí)候都會(huì)比一次多表關(guān)聯(lián)查詢慢。

回過(guò)頭來(lái)看看上面的緩存,如果這10個(gè)學(xué)生是同班,那么在一級(jí)緩存的作用下,實(shí)際查詢數(shù)據(jù)庫(kù)將會(huì)是1+1=2,后面9次班級(jí)查詢被一級(jí)緩存攔截了。在高并發(fā)的系統(tǒng)中,后面這個(gè)1就趨向于0了,因?yàn)榫彺媸侨止蚕淼摹?/p>

再來(lái)看看實(shí)體緩存,一個(gè)學(xué)校的班級(jí)不會(huì)很多,符合條件使用實(shí)體緩存。也就是一次性讀取所有班級(jí)信息,緩存到實(shí)體集合中。即使在最糟糕的情況下,10個(gè)學(xué)生都處于不同班級(jí),實(shí)體緩存也是百分百命中,實(shí)際查詢僅僅是對(duì)學(xué)生表的單表查詢,此時(shí)肯定比多表關(guān)聯(lián)查詢快。

在學(xué)生資料界面等地方,學(xué)生表查詢是非常頻繁的。顯然,這是一個(gè)非常適用單實(shí)體緩存的場(chǎng)合。學(xué)生附屬屬性(關(guān)聯(lián)表)等信息,可以通過(guò)擴(kuò)展屬性“掛”在學(xué)生實(shí)體對(duì)象上,“享受”到緩存的待遇。

數(shù)據(jù)庫(kù)層面也有一個(gè)緩存,可以算是0級(jí)緩存吧。我們所有的查詢都是單表查詢,對(duì)數(shù)據(jù)庫(kù)而言非常簡(jiǎn)單,同時(shí),因?yàn)楹?jiǎn)單的SQL,數(shù)據(jù)庫(kù)緩存命中率極高,并且非常便于建立索引進(jìn)行優(yōu)化。

基于分頁(yè)和緩存,XCode提供了一套高性能的解決方案,這種方案遠(yuǎn)勝于傳統(tǒng)的多表關(guān)聯(lián)查詢,并且是系統(tǒng)并發(fā)越高,這種優(yōu)勢(shì)越明顯。

9、臟數(shù)據(jù)支持

在更新數(shù)據(jù)的時(shí)候,往往業(yè)務(wù)需求是只更新我們修改過(guò)的數(shù)據(jù)。比如會(huì)員資料修改表單,可以設(shè)置會(huì)員信息等資料,但是不能修改最后登錄時(shí)間。這個(gè)時(shí)候,我們就需要知道哪個(gè)屬性的數(shù)據(jù)被我們修改過(guò)!

XCode的實(shí)體類中,每個(gè)數(shù)據(jù)屬性的set方法,都會(huì)先調(diào)用OnPropertyChange方法,其實(shí)就是為了設(shè)置該字段的臟屬性,說(shuō)明這個(gè)字段的數(shù)據(jù)曾經(jīng)被修改過(guò)。生成Update語(yǔ)句的時(shí)候,只修改帶有臟屬性的字段。

實(shí)體類中,除了直接修改屬性外,還可以通過(guò)索引器進(jìn)行修改,兩種的區(qū)別就在于通過(guò)索引器修改屬性時(shí),不影響臟數(shù)據(jù)設(shè)置。實(shí)際上,加載數(shù)據(jù)行到實(shí)體類中,使用的正是索引器,所以剛加載完成數(shù)據(jù)的情況下臟數(shù)據(jù)是空的。

10、多數(shù)據(jù)庫(kù)支持

  1. (MSSQL2000、MSSQL2005/2008、Oracle、MySQL、Access、SQLite) 

與大多數(shù)ORM一樣,XCode通過(guò)接口的方式支持多種數(shù)據(jù)庫(kù)。在XCode中,為每一個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)了一個(gè)數(shù)據(jù)庫(kù)操作類,繼承自數(shù)據(jù)庫(kù)接口。數(shù)據(jù)訪問(wèn)層DAL根據(jù)數(shù)據(jù)庫(kù)連接的配置識(shí)別是哪一種數(shù)據(jù)庫(kù),然后創(chuàng)建該數(shù)據(jù)庫(kù)操作類的實(shí)例,并通過(guò)操作接口來(lái)操作數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)操作類以Access數(shù)據(jù)庫(kù)為藍(lán)本,設(shè)計(jì)了一個(gè)基類,其它數(shù)據(jù)庫(kù)操作類僅需要繼承該類,重載功能點(diǎn)不一致的屬性和方法,大大減小了操作類的大小。

數(shù)據(jù)庫(kù)操作接口包含的功能有:查詢、執(zhí)行、分頁(yè)、事務(wù)、獲取架構(gòu)、DDL操作、數(shù)據(jù)庫(kù)版本等。實(shí)際上,各個(gè)數(shù)據(jù)庫(kù)的差異點(diǎn)都可以設(shè)計(jì)在操作接口中,而上層代碼根本不需要改動(dòng)。

很多ORM都為各個(gè)數(shù)據(jù)庫(kù)的差異大而苦惱,XCode開(kāi)發(fā)模式則不然。我們的原則是一切從簡(jiǎn),只使用SQL,不適用DbCommand和存儲(chǔ)過(guò)程。而所使用的SQL,基本上也是標(biāo)準(zhǔn)SQL,不會(huì)使用數(shù)據(jù)庫(kù)特性,并且都是單表操作。當(dāng)然,這種方法也不是萬(wàn)能的,不得已的時(shí)候,可以在業(yè)務(wù)層判斷當(dāng)前數(shù)據(jù)庫(kù)類型,根據(jù)不同數(shù)據(jù)庫(kù)編寫(xiě)不同的SQL,但自XCode使用以來(lái),還沒(méi)需要這樣做過(guò)。

11、獲取數(shù)據(jù)庫(kù)架構(gòu)

  1. (DAL.Tables) 

在XCode中,數(shù)據(jù)庫(kù)架構(gòu)主要包含XTable和XField類,顧名思義,它們代表著表和字段信息。數(shù)據(jù)訪問(wèn)層DAL中有個(gè)成員屬性Tables可以取得該數(shù)據(jù)庫(kù)連接的所有表信息,也就是一個(gè)XTable集合。同理,每一個(gè)XTable中,都會(huì)有一個(gè)XField集合。

這樣設(shè)計(jì),簡(jiǎn)單明了,使用者可以很容易的找到自己需要的東西。我們的代碼生成器XCoder就是依賴于XCode來(lái)獲取數(shù)據(jù)庫(kù)架構(gòu)的。有了這個(gè)功能,人人都可以寫(xiě)自己的代碼生成器了!

12、反向生成數(shù)據(jù)庫(kù)架構(gòu)

  1. (DatabaseSchema) 

這是一個(gè)很另類的功能,極少有ORM提供。在開(kāi)發(fā)和維護(hù)的過(guò)程中,難免需要修改表結(jié)構(gòu),重新生成實(shí)體類(僅生成實(shí)體類數(shù)據(jù)文件部分)。在團(tuán)隊(duì)開(kāi)發(fā)的時(shí)候,如果不是共用數(shù)據(jù)庫(kù),則還需要通知隊(duì)員做相應(yīng)的修改。維護(hù)的時(shí)候,還需要到生產(chǎn)環(huán)境做更新,如果客戶不允許直接操作數(shù)據(jù)庫(kù),那就更麻煩了。

在數(shù)據(jù)庫(kù)操作接口中,其中一個(gè)功能就是DDL操作,各個(gè)數(shù)據(jù)庫(kù)進(jìn)行重載后,可以使用DDL語(yǔ)句操作數(shù)據(jù)庫(kù)的結(jié)構(gòu)。常用的功能有:創(chuàng)建表、修改字段屬性、添加字段、刪除字段等。

XCode除了會(huì)從數(shù)據(jù)庫(kù)生成數(shù)據(jù)庫(kù)架構(gòu)外,還會(huì)從實(shí)體類生成一套數(shù)據(jù)庫(kù)架構(gòu),然后進(jìn)行對(duì)比,發(fā)現(xiàn)存在差異后,直接修改或者寫(xiě)日志提醒(由設(shè)置決定)。修改開(kāi)關(guān)沒(méi)打開(kāi)時(shí),僅僅寫(xiě)日志提醒,日志中寫(xiě)出了完整的用于修正數(shù)據(jù)庫(kù)架構(gòu)的DDL語(yǔ)句,拿到數(shù)據(jù)庫(kù)中執(zhí)行即可。

基于XCode開(kāi)發(fā)的系統(tǒng),在發(fā)布的時(shí)候,從來(lái)不帶數(shù)據(jù)庫(kù),因?yàn)閄Code會(huì)自動(dòng)根據(jù)連接字符串創(chuàng)建數(shù)據(jù)庫(kù)、數(shù)據(jù)表和字段。即使開(kāi)發(fā)使用的是A數(shù)據(jù)庫(kù),發(fā)布的時(shí)候修改數(shù)據(jù)庫(kù)連接字符串為B數(shù)據(jù)庫(kù),XCode將會(huì)按照B數(shù)據(jù)庫(kù)的規(guī)范來(lái)創(chuàng)建數(shù)據(jù)庫(kù)。如果系統(tǒng)發(fā)布還需要附帶數(shù)據(jù),那就不可能做到發(fā)布時(shí)更換數(shù)據(jù)庫(kù)了,除非發(fā)布多個(gè)數(shù)據(jù)庫(kù)的版本。

也許有人會(huì)說(shuō),不帶數(shù)據(jù)庫(kù)的話,初始化的數(shù)據(jù)怎么辦?在XCode的開(kāi)發(fā)理念中,建議在實(shí)體類增加靜態(tài)構(gòu)造函數(shù),用于檢測(cè)數(shù)據(jù)表數(shù)據(jù),如果沒(méi)有數(shù)據(jù)時(shí),是否需要?jiǎng)?chuàng)建一個(gè)默認(rèn)數(shù)據(jù),比如在管理員表創(chuàng)建一個(gè)用戶名和密碼都是admin的管理員。

13、動(dòng)態(tài)修改連接和表名

  1. (Meta.ConnName,Meta.TableName) 

數(shù)據(jù)量增大到一定程度時(shí),很多企業(yè)的方案都是給數(shù)據(jù)表改名或者把該表遷移到別的數(shù)據(jù)庫(kù)中去,僅用于查詢統(tǒng)計(jì)。

在XCode中,生成實(shí)體類時(shí),就指定了實(shí)體類所對(duì)應(yīng)的表名,但是我們并不需要為多個(gè)具有相同表結(jié)構(gòu)的表生成多個(gè)實(shí)體類,因?yàn)閷?shí)體類可以動(dòng)態(tài)修改所指向的表名,使得操作的目標(biāo)表發(fā)生改變。為了避免多線程環(huán)境所帶來(lái)的影響,該修改僅影響當(dāng)前線程。

連接名的修改方式與表名相同。

14、弱類型訪問(wèn)

(IEntity,IEntityOperate)

有時(shí)候,我們并不知道需要操作的是哪一個(gè)實(shí)體類,只有在運(yùn)行時(shí)才能確定下來(lái)。常用的做法就是反射!

為了避免不必要的性能損耗,以及避免很不美觀的編碼設(shè)計(jì)方式,XCode提供了弱類型訪問(wèn)的能力。可以通過(guò)指定類型或者表名,反射找到實(shí)體類,創(chuàng)建一個(gè)IEntityOperate操作對(duì)象,從而完成對(duì)實(shí)體類的各種操作。

IEntityOperate所提供的方法跟實(shí)體類的靜態(tài)方法基本一致,在使用上不會(huì)遇到任何困難。IEntityOperate進(jìn)行數(shù)據(jù)查詢時(shí),返回的是IEntity集合,因?yàn)槊恳粋€(gè)實(shí)體類,都實(shí)現(xiàn)了IEntity接口,足以完成基本的CURD操作。

15、動(dòng)態(tài)生成代碼

(CodeDOM,內(nèi)存實(shí)體)

在弱類型訪問(wèn)的支持下,有些簡(jiǎn)單的數(shù)據(jù)庫(kù)操作并不一定需要生成實(shí)體類,XCode在找不到實(shí)體類時(shí),將會(huì)根據(jù)表架構(gòu)在內(nèi)存中生成一個(gè)實(shí)體類,然后編譯使用。

動(dòng)態(tài)生成的另一目標(biāo)是讓使用者通過(guò)調(diào)用一些方法來(lái)生成實(shí)體類代碼,而不是一定要通過(guò)XCoder來(lái)生成。

16、擴(kuò)展加載

(把查詢中的字段映射到擴(kuò)展屬性)

XCode支持的是充血模型,從面向?qū)ο蟮慕嵌壬蟻?lái)講,這個(gè)對(duì)象的所有特點(diǎn)(屬性)和能力(方法)都應(yīng)該在實(shí)體類上實(shí)現(xiàn)。除了基本的與數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的數(shù)據(jù)屬性外,還有一些跟別的實(shí)體對(duì)象關(guān)聯(lián)的屬性,我們稱之為擴(kuò)展屬性。比如:Article.Board.Manager.UserName,可以直接得到一個(gè)帖子的版主的用戶名。

XCode不支持多表關(guān)聯(lián)查詢,但是它有擴(kuò)展屬性,所有的多表關(guān)聯(lián)查詢,都可以通過(guò)擴(kuò)展屬性來(lái)編碼實(shí)現(xiàn)。Article中的Board擴(kuò)展屬性,是在使用的時(shí)候才去加載的,加上Board可以使用實(shí)體緩存,基本上沒(méi)有數(shù)據(jù)庫(kù)操作。Manager不能使用實(shí)體緩存,但是它作為擴(kuò)展屬性“掛”在Board上,間接“享受”了緩存。

還可以編寫(xiě)一個(gè)普通的屬性作為擴(kuò)展屬性,然后執(zhí)行查詢的時(shí)候,通過(guò)selects參數(shù)把數(shù)據(jù)映射到該擴(kuò)展屬性上。比如:增加一個(gè)Total的整型屬性,然后執(zhí)行查詢Article.FindAll("BoardID=123",null,"Count(*) as Total",0,1),該查詢是取得欄目編號(hào)為123的所有帖子數(shù),然后把結(jié)果映射到Total屬性上,返回的記錄集只有一個(gè)實(shí)體對(duì)象,該實(shí)體對(duì)象的Total屬性就是所要查詢的帖子數(shù),此時(shí)別的屬性沒(méi)有意義。

該功能一般用于查詢統(tǒng)計(jì)中。使用一個(gè)實(shí)體來(lái)表現(xiàn)數(shù)據(jù),比數(shù)據(jù)集方便多了。

擴(kuò)展屬性是充血模型所特有的東西,也是相對(duì)于貧血模型(含失血模型)的最大優(yōu)勢(shì)所在!

17、泛型基類模型

  1. (Entity<TEntity>) 

XCode從v1.2起,就進(jìn)入了第二代,關(guān)鍵點(diǎn)就在于泛型基類Entity<TEntity>的使用。

在第一代XCode中,因?yàn)槌溲P?,?shí)體類上要附帶大量的方法,而當(dāng)它們的返回類型是實(shí)體類或者實(shí)體類集合時(shí),這些方法就必須實(shí)現(xiàn)于實(shí)體類的代碼中,實(shí)際上是通過(guò)代碼生成器來(lái)生成。

在第二代XCode,引入了泛型基類技術(shù),實(shí)體類通過(guò)泛型參數(shù)TEntity指定最終返回類型,編寫(xiě)查詢方法的時(shí)候,返回類型使用泛型參數(shù)TEntity即可。所以,第二代實(shí)體類只有屬性和索引器,基本不需要生成查詢和操作的方法,因?yàn)樗鼈兌荚诜盒突惱锩鎸?shí)現(xiàn)了。

大多數(shù)情況下,實(shí)體類指定的基類泛型參數(shù)就是它自己,因?yàn)樗枰运约鹤鳛榉祷仡愋?。?strong>XCode開(kāi)發(fā)模式是面向?qū)ο蟮模▽?shí)體類,也希望能夠繼承,增加一些功能,該功能可以通過(guò)改變泛型參數(shù)來(lái)實(shí)現(xiàn)。

18、實(shí)體類的繼承與重載

  1. (NewLife.CommonEntity) 

通過(guò)改變泛型參數(shù)的具體類型,實(shí)現(xiàn)實(shí)體類的繼承和重載,是XCode進(jìn)入第三代的標(biāo)志。它標(biāo)志著我們可以封裝一些基礎(chǔ)數(shù)據(jù)實(shí)體來(lái)供多個(gè)項(xiàng)目使用。

通用實(shí)體組件NewLife.CommonEntity就是該功能的代表,封裝了地區(qū)、管理員、角色、菜單、授權(quán)等實(shí)體類。具體項(xiàng)目可以直接使用它們,也可以通過(guò)繼承與重載來(lái)實(shí)現(xiàn)擴(kuò)展。

以封裝的地區(qū)表為例,它在靜態(tài)構(gòu)造函數(shù)中檢測(cè)數(shù)據(jù)表行數(shù),當(dāng)然,在這之前XCode會(huì)自動(dòng)檢測(cè)并創(chuàng)建地區(qū)表。如果地區(qū)表中沒(méi)有數(shù)據(jù),則會(huì)調(diào)用一個(gè)方法進(jìn)行數(shù)據(jù)初始化操作。地區(qū)表業(yè)務(wù)類代碼通過(guò)硬編碼方式,內(nèi)置了全國(guó)幾千個(gè)地區(qū)的區(qū)域編碼和名稱。

一旦國(guó)家修改區(qū)域劃分,只需要修改該類,所有使用該組件的項(xiàng)目都將使用上全新的區(qū)域數(shù)據(jù)。如果這些功能代碼都復(fù)制到每一個(gè)使用的項(xiàng)目中去,將形成一個(gè)非常難以維護(hù)的狀況。

小結(jié):詳談XCode學(xué)習(xí)基礎(chǔ)之ORM組件的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。更多相關(guān)xcode的內(nèi)容,請(qǐng)參考編輯推薦。

責(zé)任編輯:zhaolei 來(lái)源: 博客園
相關(guān)推薦

2011-08-03 15:21:23

ORM XCode 數(shù)據(jù)庫(kù)

2011-07-20 14:31:56

XCode User Scrip 腳本

2011-08-01 16:50:28

Xcode 動(dòng)態(tài) View

2015-01-12 13:48:55

Android應(yīng)用組件

2011-08-01 10:01:12

Xcode UIView 動(dòng)畫(huà)

2011-08-01 10:13:46

Xcode 視圖 動(dòng)畫(huà)

2011-08-01 17:01:02

Xcode WindowBase View

2011-08-01 18:02:33

2009-05-20 14:47:18

學(xué)習(xí)程序員編程語(yǔ)言

2010-03-17 15:00:34

云計(jì)算

2021-10-14 15:14:36

鴻蒙HarmonyOS應(yīng)用

2011-08-01 17:50:28

Xcode

2011-07-20 09:49:41

Xcode Interface Builder

2011-06-02 10:28:18

2011-08-11 16:31:08

XCode

2009-12-17 16:16:00

CCIE學(xué)習(xí)

2011-08-10 14:00:22

XcodeUIWebView視頻

2023-05-17 10:16:04

ORM工具包SQLAlchemy

2011-08-18 10:17:21

Xcode4Xcode

2023-12-29 08:37:59

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)