freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于net的數(shù)據(jù)庫對象化訪問開發(fā)框架的構建與應用碩士學位論文-資料下載頁

2025-06-27 18:47本頁面
  

【正文】 y調(diào)用原理圖通過ExecuteSQL函數(shù)中傳入MFDataParameters參數(shù)類型()來傳遞。主要原因是MFDataParameters參數(shù)類型實現(xiàn)了可序列化和持久化,當數(shù)據(jù)通過傳輸時必須要對參數(shù)進行序列化傳遞,然后在執(zhí)行時再反序列化為內(nèi)存對象。所以在框架內(nèi)部對參數(shù)類型進行的重新的設計和轉換,以支持遠程傳輸。2.MFWebDataService服務類 Web Service是由企業(yè)發(fā)布的完成其特定商務需求的在線應用服務。它是一種構建應用程序的普遍模型,可以在任何支持網(wǎng)絡通信的操作系統(tǒng)中運行。這也是目前SOA系統(tǒng)核心技術之一。ThinkWide框架提供了MFWebData Service服務類,此類主要基于WebService技術提供跨網(wǎng)絡和平臺的數(shù)據(jù)傳輸服務。在框架底層實現(xiàn)了WebService服務使得開發(fā)人員無需擔憂業(yè)務部署的問題,簡化了開發(fā)的復雜程度,提高了程序的適應能力。下圖是該類的實現(xiàn)原理。圖 MFWebDataService類的調(diào)用原理,同時在服務端的HostService類調(diào)用本地的MFDataManager類來訪問數(shù)據(jù)庫并返回數(shù)據(jù)。此類除了實現(xiàn)了IDataService的接口外,由于WebService的特殊性性大多數(shù)參數(shù)才傳輸時都需要轉換為WebService支持的序列化類,所以在框架內(nèi)部都實現(xiàn)了內(nèi)部參數(shù)自動轉換函數(shù)。,這些類型是WebService傳輸所支持的類型,框架在調(diào)用WebSevice時的時候會自動的轉換ADO中的CommandType,ParameterDirection等類型為WebService中重新定義的數(shù)據(jù)類型,這樣就能夠無縫的使數(shù)據(jù)傳送到遠端WebService服務上。3.MFWCFDataService服務類WCF是微軟發(fā)展的一組數(shù)據(jù)通信的應用程序開發(fā)接口。WCF也是微軟云計算服務的核心技術之一。所在對WCF的直接支持無疑是提升本框架應用范圍的重要一步,也使得本框架能夠很容易的擴展云計算功能。MFWCFDataService類主要提供用基于WCF協(xié)議和技術的數(shù)據(jù)服務。同樣該服務也是跨網(wǎng)絡的,目前WCF還不是跨平臺的,主要在微軟服務器上運行。,所以數(shù)據(jù)類型基本都無需轉換即可以在網(wǎng)絡上傳輸。其實現(xiàn)原理如下圖:圖 MFWCFDataService類的調(diào)用原理,同時在服務端的WCFService類調(diào)用本地的MFDataManager類來訪問數(shù)據(jù)庫并返回數(shù)據(jù)。4.MFRemoteDataService服務類微軟Remoting技術簡而言之是一種分布式處理方式,該技術是微軟DCOM的一種升級,它改善了很多功能。Remoting提供了一種允許對象通過應用程序域與另一對象進行交互的框架。MFRemoteDataService類主要提供了基于微軟Remoting技術的數(shù)據(jù)服務。同樣該服務也框架底層實現(xiàn)的,對使用者來說是透明的,這簡化了開發(fā)人員開發(fā)難度,只需配置一下即可使用Remoting技術進行數(shù)據(jù)傳輸。 數(shù)據(jù)對象封裝層的詳細設計與實現(xiàn)使用數(shù)據(jù)對象封裝層可以將數(shù)據(jù)對象化,減少SQL語句,簡化保存,修改,選取表數(shù)據(jù)的操作。這一層的核心類是MFActiveRecordBaseT泛型類和MFActiveStoredBaseT泛型類兩個持久化基類,前者支持表和視圖對象的映射后者支持存儲過程對象的映射。它有一些用于持久化的屬性和操作。下圖是數(shù)據(jù)對象封裝層的結構設計圖。圖 數(shù)據(jù)對象封裝層的結構設計圖從圖中可以看到MFActiveRecordBaseT和MFActiveStoredBaseT泛型類都是通過MFDataTransfer類進行數(shù)據(jù)轉換,該類最后掉用上一層數(shù)據(jù)傳輸層的MFDataAdpter類將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)庫中。下面詳細介紹一下MFActiveRecordBaseT和MFActiveStoredBaseT泛型類的組成、CRUD 操作、屬性映射及類型轉換原理。MFActiveRecordBase與MFActiveStoredBase從本質(zhì)上來說是持久化對象的基類,所謂持久化就是指可以自動保存類中數(shù)據(jù)的功能。關于持久化對象有很多中方式可以選擇,最簡單的方式就是將每個持久化對象從一個支持持久化與映射的基類繼承,規(guī)定了必要的對象持久化所需要的屬性和方法,例如必要的CRUD 操作,它的好處是易于實現(xiàn)。雖然它在每個持久化類中都要寫一些數(shù)據(jù)庫相關的代碼,不過這些代碼只存在于持久化對象中,易于查找和修改,還可以在必要時進行優(yōu)化。最簡單的持久化對象只需要具有對象唯一的標識符屬性,可以對應數(shù)據(jù)庫中的鍵值。根據(jù)實現(xiàn)繼承的方式需要一個標識父類對象的屬性,它可以對應在數(shù)據(jù)庫中的外鍵,此外,持久化對象的基類的方法還應該包含持久化對象所保含的最基本的CRUD 操作。如:Save 操作,將對象數(shù)據(jù)寫入數(shù)據(jù)庫中。Update 操作,用于更新對象。Delete 操作,它從數(shù)據(jù)庫中刪除一個對象的數(shù)據(jù)。Insert操作,它從數(shù)據(jù)庫中返回一個類的單一實例及它的數(shù)據(jù)。同時,根據(jù)需要還可以定義一些更為方便的操作,如FindAll 操作,它從數(shù)據(jù)庫中返回一個類的實例集合,包含所有對象;FindOne,它從數(shù)據(jù)庫中返回一個類的實例集合,包含符合條件的部分對象。2. MFActiveRecordBase基類的CRUD 操作創(chuàng)建、讀取、更新和刪除基本持久操作的動機就是要讓所有的持久化對象為邏輯層提供統(tǒng)一的接口去讀取和寫入。任何被持久化的對象都要對數(shù)據(jù)庫進行讀取和寫入。另外,對象也會從持久存儲中刪除,因此,如果一個對象需要持久化,至少要提供最小的操作集合,它們是創(chuàng)建、讀取、更新、刪除。持久對象具有基本的 CRUD 操作和其它需要的操作如FindAll或FindOne。這些都是通過從MFActiveRecordBase繼承而來的。此外,CRUD 操作和其它持久化對象的方法都是靜態(tài)方法。這樣做的好處是使實例化的對象在程序進程中占用較少的內(nèi)存,否則每個實例化的對象都會在內(nèi)存中有自己的方法代碼段。下圖是MFActiveRecordBase基類的主要方法圖 MFActiveRecordBase類圖Insert()函數(shù):在數(shù)據(jù)庫中與此實體關系類對應的表中插入對象對應的記錄。Delete()函數(shù):在數(shù)據(jù)庫中與此實體關系類對應的表中刪除對象對應的記錄。Update()函數(shù):在數(shù)據(jù)庫中與此實體關系類對應的表中更新對象對應的記錄。FindAll()函數(shù):在數(shù)據(jù)庫中檢索與此實體關系類對應的表中的記錄集合。FindOne()函數(shù):在數(shù)據(jù)庫中檢索與此實體關系類對應的表中的一條記錄。3. MFActiveRecordBase與MFActiveStoredBase類的SQL 代碼操作在持久化對象的 CRUD 和其它方法操作中有查詢、更新、插入、刪除SQL 語句。一方面,可以在持久層的持久化對象的CRUD 等操作中編寫SQL 代鍵,來讀取和寫入數(shù)據(jù)庫。這種方式會將SQL 代碼與持久化對象耦合在一起。無論什么時候數(shù)據(jù)庫發(fā)生變化,可能僅僅是表、列改名或發(fā)生移動,都必須修改持久化對象中的SQL 代碼。這樣就減少了持久化對象的可維護性和升級能力。所以,為了解決這個問題,對象持久化模型需要提供根據(jù)前期構造的數(shù)據(jù)庫信息在運行期動態(tài)生成SQL 語句。在ThinkWide框架中提供了一系列的類來分工在動維護這些SQL的產(chǎn)生,如下圖:圖 SQL語句自動維護類圖中MFSQLUpdate類自動維護Update相關的SQL語句,同樣MFSQLDelete,MFSQLInsert,MFSQLSelect也自動維護相關的SQL語句。他們的實現(xiàn)原理都是利用了反射機制從數(shù)據(jù)庫對象中獲得表的字段等信息,然后自動組裝相關SQL,大大簡化了程序員的開發(fā)工作量。4. MFActiveRecordBase與MFActiveStoredBase類的屬性映射從數(shù)據(jù)庫中得到一行記錄,每個對象的值必須映射到對象的一個屬性或一組屬性上。同樣,當將值存入到數(shù)據(jù)庫中,一個對象的屬性必須以某種方式映射到數(shù)據(jù)庫的字段上。屬性映射將對象在屬性變量中存放值與數(shù)據(jù)庫在字段中存放值進行對應,將有些復雜對象與多個數(shù)據(jù)庫、多個數(shù)據(jù)庫表中得到值對應。此外,還可以在持久化對象的操作中和SQL 語句中直接進行映射。ThinkWide框架在屬性映射的設計中沒有使用傳統(tǒng)的XML配置文件,而是使用較為先進的Attribute屬性標簽方式。,它包含用于訪問和測試自定義屬性的簡便方法。雖然任何用戶定義的類型均可用作屬性,但大多數(shù)屬性應當是從Attribute派生的類型的實例。所有屬性均直接或間接地從Attribute派生。屬性可應用于任何目標元素(請參見AttributeTargets);一個屬性的多個實例可應用于同一個目標元素;并且屬性可由從目標元素派生的元素繼承。編譯器和其他開發(fā)工具利用這些信息來標識哪些屬性是自定義屬性。自定義屬性可與元數(shù)據(jù)的任何元素一起存儲。此機制可用于在編譯時存儲應用程序特定的信息,并在運行時或在其他工具讀取元數(shù)據(jù)時訪問這些信息。下面分析ThinkWide框架中標簽的實現(xiàn)方式。//Table Object (Alias Name)[MFTable(TableName=test)]public class xTest : MFActiveRecordBasexTest{[MFField(AllowNull = false, PrimaryKey = true)]public Guid Guid { get。 set。 }public DateTime? dCreateDate { get。 set。 }}//View Object [MFView(ViewName=vwTest,TableName=Test)]public class vwTest : MFActiveRecordBasevwTest{[MFField(PrimaryKey = true, FieldName = Guid)]public Guid XGuid { get。 set。 }public DateTime? dCreateDate { get。 set。 }}//StoredProcedure Object [MFStored(StoredProcedureName = myTestValue)]public class myTestValue : MFActiveStoredBasemyTestValue{[MFStoredParameter(Direction=,DbType=)]public string Value { get。 set。 }}從上面的代碼中第一個類xTest是對數(shù)據(jù)庫中表test的對象實體類,它繼承自MFActiveRecordBase泛型類。當類名和表名不一致是使用MFTable標簽的TableName屬性來指明正確的表名稱。在xTest類的Guid屬性上可以看到MFField標簽用來指明該屬性的數(shù)據(jù)庫特征,比如主鍵、實際的字段名。在xTest類的dCreateDate屬性上可以看到“?”標示符號,這是可以付空值標示支持數(shù)據(jù)庫的Null。另外對于vwTest類可以看到使用了MFView標簽,其中ViewName屬性指示框架獲取數(shù)據(jù)是從vwTest視圖來獲得,TableName屬性指示框架保存數(shù)據(jù)時保存到Test表。關于第三個類myTestValue的存儲過程對象原理類似。這類標簽在框架還有很多種分別有不同作用主要分為幾大類。(1)類對象標簽:主要標示類對象的特性,例如上面MFTable,MFView等。(2)屬性對象標簽:主要標示類中屬性對象的特性,例如上面MFField, MFStoreParameter,MFNotNull(不能為空標簽)等。(3)關系標簽:主要類對象之間關系的特性,比如MFOneToOne(一對一關系),MFBelongsTo(一對多,多對一,多對以)的標簽。下圖是標簽類部分結構圖。圖 標簽類結構圖在前面章節(jié)的關系模型分析中,數(shù)據(jù)庫對象有著各種同的關系類型,如何將數(shù)據(jù)庫中表關系實現(xiàn)到對象模型中也是ORM的一個重要內(nèi)容,在ThinkWide框架中提供了MFOneToOne,MFBelongsTo,MFHasMany標簽實現(xiàn)了表關系中的以下三種主要關系:(1)一對一:在任意一個類對應的表對象中加入MFOneToOne標簽。根據(jù)類之間的導航,強制的關系約束確定外鍵所處的表,這樣在性能上沒有差別,只是使表達規(guī)范,明確。(2)一對多:在存在關聯(lián)的多的一側的對象中加入MFBelongsTo標簽指向主對象的屬性,在主對象的特定屬性上加入MFHasMany標簽即可。(3)多對多:將一個多對多的關系處理為多個一對多的關系,每個一對多的關系使用 MFBelongsTo標簽指定,這就自動維護了關系數(shù)據(jù)庫中兩個或多個的表之間的關系映射為對象模型中的多個對象的相互關聯(lián)。屬性標簽的讀取是通過框架中專門負責反射管理的MFReflect統(tǒng)一獲取,之后將標簽信息提交給MFDataTransfer類,或者反向將數(shù)據(jù)轉換為程序對象實體。如轉換過程下圖所示:圖 數(shù)據(jù)轉換過程圖標簽讀取的代碼設計是通過GetRelationInfo()來讀取類的標簽信息 ,然后根據(jù)參數(shù)在instance實體對象上獲取標簽集合然后遍歷分析標簽中的關系相關的標簽,比如判斷MFHasMany標簽,得到標簽后讀取其中的相關信息,為轉換對象做數(shù)據(jù)準備。7. MFActiveRecordBase與MFActiveStoredBase類的類型轉換對象類型和數(shù)據(jù)庫類型之間存在著阻抗不匹配,因此數(shù)據(jù)庫值類型并不總是和對象類型直接對應。例如,一個布爾值也許在數(shù)據(jù)庫存成T或者F。類型轉換允許對象值和數(shù)據(jù)庫值之間的轉換。因此類型轉換要解決如何將一個沒有對應數(shù)據(jù)庫類型的對象映射到一個數(shù)據(jù)庫類型的問題。這些需要持久化對象提供相應的轉換方法。至于最簡單的基本數(shù)據(jù)類型的轉換,完全可以利用編程語言提供的有關數(shù)據(jù)庫操作類型轉換函數(shù)進行轉換。“?”運算符
點擊復制文檔內(nèi)容
語文相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1