Step by Step-構建本身的ORM系列-配置管理層

1、開篇

        距離上篇《Step by Step-構建本身的ORM系列-數據訪問層》的時間間隔的過久了,很對不住你們啊,主要是由於在寫《設計模式-系列索引系列》必須提早先寫完,才能html

繼續這個系列,固然我也在寫這幾個系列的過程當中,對ORM這個系列中的原來的實現的想法有了新的認識和改進,固然這些都不是說是很先進的思想或者認識,也多是你們見過數據庫

的思路吧,但願後面我能在寫設計模式系列的過程當中,穿插講解ORM系列,固然個人這個構建的系列,也只能說是很簡易的,本身平時開發個小應用工具或者什麼的,可能用他,設計模式

由於是本身開發的嘛,畢竟使用起來仍是比較順手的!符合本身的操做習慣嘛。緩存

        固然我寫這個系列的過程當中,也會有本身認識偏激的地方,或者思路不正確的地方,還請大夥多多指出和批評。我也是在我目前的項目中學習到了不少的寶貴的經驗,其實多線程

咱們應該能看到ORM給咱們提供的方便和不便之處,咱們取其精華,剔除糟粕,不過這真的很難。這塊可能還須要大牛們多多指點。架構

       對於上篇文章中,咱們提到過幾個問題,而後通過我與很多朋友之間的交流,得出了一些不錯的意見和想法,這裏分享一下總結後的內容。併發

       一、提供一個通用的查詢方法,能夠動態的返回列。框架

       對於這個問題呢,咱們通過商討考慮了最後最可能的狀況以下,咱們藉助於平時咱們知道的params的動態行來進行返回,可能的實例代碼以下:異步

       image

      固然這裏給出的代碼不必定是最好的,固然這裏給出的是目前我的認爲不是太差的方案了,若是您有好的方案請留言,謝謝您了分佈式

      二、咱們如何在表現層中更好的調用咱們的查詢層服務方法:

       image

      這是咱們上篇給出的一個實現方式,後來思考下,這樣的方式其實也不是最好的方式,通過思考,咱們將上面的傳入查詢條件的語句進行封裝,修改爲以下形式。

      image

      第二步,咱們提供參數輔助類:

     image

     第三步,抽象工廠,負責建立上面的輔助類對象實例

       image

    最後,給出具體的調用測試代碼:

    image

上面咱們講述了,上篇中解決的幾個問題,相信這類的問題,在您的項目中,應該也是很常見的,固然,若是您有更好的方法,請您反饋,獲得您的反饋是我最大的動力,謝謝!

2、摘要

        本篇將會開始講述ORM層中可能應該要提供的配置管理層的相關職責和功能,咱們都知道目前咱們在很流行的ORM框架中,都會爲了應對不一樣程度的變化,咱們爲爲了提

高咱們的ORM框架的靈活性或者適應性,咱們經過配置文件來應對這樣的變化,我想NHibernate是將這個方面應用最好的框架之一了,我呢,也是最近纔開始看NHibernate的框

架使用,也是參考博客園中一些很好的教程。

        本文將會結合配置管理層應該提供的相關功能和ORM如何與配置管理層相結合來講說吧:

        我認爲的在ORM中應該提供的配置管理層來進行擴展的可能功能列表以下:

        一、對於底層ORM中的線程池的配置管理。

        二、對於底層的ORM中的數據鏈接池的配置

        三、ORM提供的對象工廠的程序集配置。

        四、ORM提供的緩存服務的相關配置信息。

        五、ORM中的底層對於多模式的支持。

        六、ORM的對於服務的啓用與否的控制。

        七、配置ORM的其餘相關參數,好比是否啓用事務,是否啓用分佈式等等。

3、本文大綱

       一、開篇。

       二、摘要。

       三、本文大綱。

       四、ORM之數據訪問層分析。

       五、本章總結。

       六、系列進度。

       七、下篇預告。

4、ORM之配置管理層分析

          4.一、對於底層ORM中的線程池的配置管理

         ORM底層應該對多線程併發的時候,作一個考慮,好比咱們是否使用系統自身提供的線程池來控制互斥資源的放問,來控制併發,這個時候,咱們能夠進行控制,而且可

以控制線程池中的活動線程最多能夠同時運行的最大併發數量,包括資源持有的最大時間,還有就是等待超時的時間,線程的生命週期等等。這個咱們怎麼理解呢?就是以下的過

程:

image具體的配置項,我這裏就不給出了。

          4.二、對於底層的ORM中的數據鏈接池的配置

        數據鏈接池的主要做用是什麼?咱們必須搞清楚,因此才決定有沒有必要使用這個鏈接池,通常來講,系統的使用鏈接數超過2個使用鏈接池就是有必要的,由於咱們每次

與數據庫創建連接都須要耗費不少的資源,若是咱們可以在不使用數據庫服務的時候,咱們把這個連接佔用的資源都釋放掉,那麼下次咱們訪問數據服務的時候,咱們又須要建立

新的連接,這樣每次在建立連接的時候,就消耗了太多的系統性能,咱們是否可以將這些建立好後的連接緩存起來,放在數據庫連接池中,這樣若是咱們發現數據庫鏈接池中的有

空的連接存在,咱們就直接拿來使用就行了,若是數據庫鏈接池中的資源都在佔用,那麼咱們能夠有一個隊列來緩存咱們要執行的任務隊列,經過很好的控制管理,咱們來控制任

務的異步執行。咱們來看看數據庫鏈接池的狀況,應該和線程池在處理上差很少:

        image

          4.三、ORM提供的對象工廠的程序集配置

                 咱們提供一個配置項,完成對抽象工廠的配置,參考咱們以前講述的設計模式系列中的抽象工廠的配置,完成通用對象的建立。若是您尚未看如何配置,請查看以下文章:

           《系統架構技能之設計模式-抽象工廠模式

                若是您有更好的意見或者想法,能夠提出來,謝謝!

          4.四、ORM提供的緩存服務的相關配置信息

         緩存服務,咱們知道,ORM的性能損失就是在對象關係映射的相互映射中的損失,因爲,咱們這裏又是採用特性+反射來作的,那麼無疑,咱們若是不緩存關係映射的過

程,那麼咱們的ORM設計出的效率,確定是否是讓咱們很滿意的,固然數據量很小的狀況下仍是能夠的,可是一旦數據量上升,那麼將會是災難。

          咱們提供的緩存能夠在將對象映射爲數據庫表字段的這塊,否則每次進行持久化操做的時候,咱們就要反射一次,那麼對於常常操做的對象,無疑是個巨大的性能損失,

咱們能夠考慮將這塊的映射關係,緩存下來。

          咱們的緩存服務還能夠對自動生成SQL語句的時候的緩存,主要體如今,咱們不用每次建立SQL語句的時候,咱們都反射來作,咱們經過緩存來完成。

          咱們的緩存服務還能夠是對數據的緩存,好比咱們底層設計好的緩存策略,爲上次模塊提供支持,好比咱們提供底層的數據緩存,經過提供相關的配置,咱們能夠提供類

iBATIS提供的緩存形式。咱們能夠配置緩存的過時策略,和引發緩存變化的緣由等等。

          具體的配置形式:

         image

          還包括一些底層參數配置的緩存,因爲有些項咱們每次讀取配置文件可能效率上出如今文件的IO操做,這個時候,咱們能夠考慮把配置信息緩存起來,對於一些不是很常常變化的內容。

          對於配置文件的操做,咱們能夠考慮圖形化的操做界面,爲用戶提供更好的使用方式。

          4.五、ORM中的底層對於多模式的支持

          這裏提出的多模式,也是參考一些對於內部會議的一些思考,好比說,咱們的ORM對於debug模式和其餘的release版本提供的功能是否是應該不同。或者說ORM的適應性應該更強大。

          咱們經過配置項來提供,咱們內部底層的ORM提供對不一樣的模式的支持,包括咱們底層ORM的可調式的設計和其餘方面的設計思想。

          image

          咱們知道對於底層框架的測試是個很大的工程,須要不斷的測試,不斷的優化,才能提升ORM的穩定性和性能,因此咱們可能前期考慮的比較多,那麼咱們才能在ORM的

設計中考慮到更多的適應性和擴展性,只有這樣,咱們的底層測試工做才能開展的很好,也就能知足後續的不斷的變化需求。

          4.六、ORM的對於服務的啓用與否的控制

          ORM的服務的啓用禁用,主要是體如今咱們底層的一些功能的設定,好比說是否是動態啓用日誌功能,或者說是否是啓用底層的底層驗證功能,還包括其餘的一些AOP的

相關設置,包括一些配,啓用禁用序列化的服務等。對於查詢服務中的是否啓用緩存分頁,包括緩存的替換方式,是增量疊加仍是徹底覆蓋的方式等。

          4.七、配置ORM的其餘相關參數

          ORM的其餘配置項,我理解中的應該還包含以下的配置服務:

    image

    具體的詳細內容,我估計我也就沒有什麼特別詳說的內容了,你們一看就知道了。

5、本章總結

        本章都是關於配置的相關內容,本文並無提供出具體的代碼實現,因爲對於配置文件的操做, 其實網上有太多的例子了,我這裏也不班門弄斧的給出大夥了,網上有不少

更好的例子,我這裏就不給出操做代碼,VS內置了很強大的操做配置文件的類,咱們能夠簡單的包裝下便可知足咱們的要求,固然若是知足不了,那你就從新擴展功能吧,我上

面只是給出了ORM可能提供的功能配置項,也沒有給出配置文件的具體格式和內容,固然若是我上面有什麼遺漏或者沒有考慮到的地方,還請您多多指出,我會補上去,謝謝您的

提醒!

6、系列進度

        一、Step by Step-構建本身的ORM系列-開篇

        二、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框架

        八、Step by Step-構建本身的ORM系列-瓶頸、優化

        九、Step by Step-構建本身的ORM系列-實例

7、下篇預告

      下篇咱們將會開始講述對象映射層中的具體的緩存及相關的過時策略,還包括一些底層ORM對象映射過程當中的可測試的設計及可跟蹤的設計,但願能夠對你們有所幫助,如

果您有任何的已經和建議,請您留言,因爲本人水平有限,錯誤之處在所不免,還請你們多多指出!

相關文章
相關標籤/搜索