繼續這個系列,當然我也在寫這幾個系列的過程中,對ORM這個系列中的原來的實作的想法有了新的認識和改進,當然這些都不是說是很先進的思想或者認識,也可能是大家見過 的思路吧,希望後面我能在寫設計模式系列的過程中,穿插講解ORM系列,當然我的這個建構的系列,也隻能說是很簡易的,自己平時開發個小應用工具或者什麼的,可能用他, 因為是自己開發的嘛,畢竟使用起來還是比較順手的!符合自己的操作習慣嘛。 當然我寫這個系列的過程中,也會有自己認識偏激的地方,或者思路不正确的地方,還請大夥多多指出和批評。我也是在我目前的項目中學習到了很多的寶貴的經驗,其實 我們應該能看到ORM給我們提供的友善和不便之處,我們取其精華,剔除糟粕,不過這真的很難。這塊可能還需要大牛們多多指點。 對于上篇文章中,我們提到過幾個問題,然後經過我與不少朋友之間的交流,得出了一些不錯的意見和想法,這裡分享一下總結後的内容。 1、提供一個通用的查詢方法,可以動态的傳回列。 對于這個問題呢,我們經過商讨考慮了最後最可能的情況如下,我們借助于平時我們知道的params的動态行來進行傳回,可能的執行個體代碼如下:當然這裡給出的代碼不一定是最好的,當然這裡給出的是目前個人認為不是太差的方案了,如果您有好的方案請留言,謝謝您了! 2、我們如何在表現層中更好的調用我們的查詢層服務方法:![]()
Step by Step-建構自己的ORM系列-配置管理層 這是我們上篇給出的一個實作方式,後來思考下,這樣的方式其實也不是最好的方式,經過思考,我們将上面的傳入查詢條件的語句進行封裝,修改成如下形式。![]()
Step by Step-建構自己的ORM系列-配置管理層 第二步,我們提供參數輔助類:![]()
Step by Step-建構自己的ORM系列-配置管理層 第三步,抽象工廠,負責建立上面的輔助類對象執行個體![]()
Step by Step-建構自己的ORM系列-配置管理層 最後,給出具體的調用測試代碼:![]()
Step by Step-建構自己的ORM系列-配置管理層 上面我們講述了,上篇中解決的幾個問題,相信這類的問題,在您的項目中,應該也是很常見的,當然,如果您有更好的方法,請您回報,得到您的回報是我最大的動力,謝謝!![]()
Step by Step-建構自己的ORM系列-配置管理層
本篇将會開始講述ORM層中可能應該要提供的配置管理層的相關職責和功能,我們都知道目前我們在很流行的ORM架構中,都會為了應對不同程度的變化,我們為為了提 高我們的ORM架構的靈活性或者适應性,我們通過配置檔案來應對這樣的變化,我想NHibernate是将這個方面應用最好的架構之一了,我呢,也是最近才開始看NHibernate的框 架使用,也是參考部落格園中一些很好的教程。 本文将會結合配置管理層應該提供的相關功能和ORM如何與配置管理層相結合來說說吧: 我認為的在ORM中應該提供的配置管理層來進行擴充的可能功能清單如下: 1、對于底層ORM中的線程池的配置管理。 2、對于底層的ORM中的資料連接配接池的配置 3、ORM提供的對象工廠的程式集配置。 4、ORM提供的緩存服務的相關配置資訊。 5、ORM中的底層對于多模式的支援。 6、ORM的對于服務的啟用與否的控制。 7、配置ORM的其他相關參數,比如是否啟用事務,是否啟用分布式等等。
1、開篇。 2、摘要。 3、本文大綱。 4、ORM之資料通路層分析。 5、本章總結。 6、系列進度。 7、下篇預告。
4.1、對于底層ORM中的線程池的配置管理
ORM底層應該對多線程并發的時候,做一個考慮,比如我們是否使用系統自身提供的線程池來控制互斥資源的放問,來控制并發,這個時候,我們可以進行控制,并且可 以控制線程池中的活動線程最多可以同時運作的最大并發數量,包括資源持有的最大時間,還有就是等待逾時的時間,線程的生命周期等等。這個我們怎麼了解呢?就是如下的過 程:![]()
Step by Step-建構自己的ORM系列-配置管理層
4.2、對于底層的ORM中的資料連接配接池的配置
資料連接配接池的主要作用是什麼?我們必須搞清楚,是以才決定有沒有必要使用這個連接配接池,一般來說,系統的使用連接配接數超過2個使用連接配接池就是有必要的,因為我們每次 與資料庫建立連結都需要耗費很多的資源,如果我們能夠在不使用資料庫服務的時候,我們把這個連結占用的資源都釋放掉,那麼下次我們通路資料服務的時候,我們又需要建立 新的連結,這樣每次在建立連結的時候,就消耗了太多的系統性能,我們是否能夠将這些建立好後的連結緩存起來,放在資料庫連結池中,這樣如果我們發現資料庫連接配接池中的有 空的連結存在,我們就直接拿來使用就好了,如果資料庫連接配接池中的資源都在占用,那麼我們可以有一個隊列來緩存我們要執行的任務隊列,通過很好的控制管理,我們來控制任 務的異步執行。我們來看看資料庫連接配接池的情況,應該和線程池在處理上差不多:![]()
Step by Step-建構自己的ORM系列-配置管理層
4.3、ORM提供的對象工廠的程式集配置
我們提供一個配置項,完成對抽象工廠的配置,參考我們之前講述的設計模式系列中的抽象工廠的配置,完成通用對象的建立。如果您還沒有看如何配置,請檢視如下文章: 如果您有更好的意見或者想法,可以提出來,謝謝!
4.4、ORM提供的緩存服務的相關配置資訊
緩存服務,我們知道,ORM的性能損失就是在對象關系映射的互相映射中的損失,由于,我們這裡又是采用特性+反射來做的,那麼無疑,我們如果不緩存關系映射的過 程,那麼我們的ORM設計出的效率,肯定是不是讓我們很滿意的,當然資料量很小的情況下還是可以的,但是一旦資料量上升,那麼将會是災難。 我們提供的緩存可以在将對象映射為資料庫表字段的這塊,不然每次進行持久化操作的時候,我們就要反射一次,那麼對于經常操作的對象,無疑是個巨大的性能損失, 我們可以考慮将這塊的映射關系,緩存下來。 我們的緩存服務還可以對自動生成SQL語句的時候的緩存,主要展現在,我們不用每次建立SQL語句的時候,我們都反射來做,我們通過緩存來完成。 我們的緩存服務還可以是對資料的緩存,比如我們底層設計好的緩存政策,為上次子產品提供支援,比如我們提供底層的資料緩存,通過提供相關的配置,我們可以提供類 似iBATIS提供的緩存形式。我們可以配置緩存的過期政策,和引起緩存變化的原因等等。 具體的配置形式:還包括一些底層參數配置的緩存,由于有些項我們每次讀取配置檔案可能效率上出現在檔案的IO操作,這個時候,我們可以考慮把配置資訊緩存起來,對于一些不是很經常變化的内容。 對于配置檔案的操作,我們可以考慮圖形化的操作界面,為使用者提供更好的使用方式。![]()
Step by Step-建構自己的ORM系列-配置管理層
4.5、ORM中的底層對于多模式的支援
這裡提出的多模式,也是參考一些對于内部會議的一些思考,比如說,我們的ORM對于debug模式和其他的release版本提供的功能是不是應該不一樣。或者說ORM的适應性應該更強大。 我們通過配置項來提供,我們内部底層的ORM提供對不同的模式的支援,包括我們底層ORM的可調式的設計和其他方面的設計思想。我們知道對于底層架構的測試是個很大的工程,需要不斷的測試,不斷的優化,才能提高ORM的穩定性和性能,是以我們可能前期考慮的比較多,那麼我們才能在ORM的 設計中考慮到更多的适應性和擴充性,隻有這樣,我們的底層測試工作才能開展的很好,也就能滿足後續的不斷的變化需求。![]()
Step by Step-建構自己的ORM系列-配置管理層
4.6、ORM的對于服務的啟用與否的控制
ORM的服務的啟用禁用,主要是展現在我們底層的一些功能的設定,比如說是不是動态啟用日志功能,或者說是不是啟用底層的底層驗證功能,還包括其他的一些AOP的 相關設定,包括一些配,啟用禁用序列化的服務等。對于查詢服務中的是否啟用緩存分頁,包括緩存的替換方式,是增量疊加還是完全覆寫的方式等。
4.7、配置ORM的其他相關參數
ORM的其他配置項,我了解中的應該還包含如下的配置服務:具體的詳細内容,我估計我也就沒有什麼特别詳說的内容了,大家一看就知道了。![]()
Step by Step-建構自己的ORM系列-配置管理層
本章都是關于配置的相關内容,本文并沒有提供出具體的代碼實作,由于對于配置檔案的操作, 其實網上有太多的例子了,我這裡也不班門弄斧的給出大夥了,網上有很多 更好的例子,我這裡就不給出操作代碼,VS内置了很強大的操作配置檔案的類,我們可以簡單的包裝下即可滿足我們的要求,當然如果滿足不了,那你就重新擴充功能吧,我上 面隻是給出了ORM可能提供的功能配置項,也沒有給出配置檔案的具體格式和内容,當然如果我上面有什麼遺漏或者沒有考慮到的地方,還請您多多指出,我會補上去,謝謝您的 提醒! 六、系列進度 1、Step by Step-建構自己的ORM系列-開篇 2、Step by Step-建構自己的ORM系列-資料通路層 3、Step by Step-建構自己的ORM系列-配置管理層 4、Step by Step-建構自己的ORM系列-對象映射層[上] 5、Step by Step-建構自己的ORM系列-對象映射層[中] 6、Step by Step-建構自己的ORM系列-對象映射層[下] 7、Step by Step-建構自己的ORM系列-測試ORM架構 8、Step by Step-建構自己的ORM系列-瓶頸、優化 9、Step by Step-建構自己的ORM系列-執行個體 七、下篇預告 下篇我們将會開始講述對象映射層中的具體的緩存及相關的過期政策,還包括一些底層ORM對象映射過程中的可測試的設計及可跟蹤的設計,希望可以對大家有所幫助,如 果您有任何的已經和建議,請您留言,由于本人水準有限,錯誤之處在所難免,還請大家多多指出! 本文轉自何戈洲部落格園部落格,原文連結:http://www.cnblogs.com/hegezhou_hot/archive/2010/12/15/1906391.html,如需轉載請自行聯系原作者