《Enterprise Library深入解析与灵活应用》博文系列汇总
Enterprise Library是微軟P&P部門開發(fā)的眾多Open source框架中的一個(gè),最新的版本已經(jīng)出到了4.1。由于接觸Enterprise Library已經(jīng)有很長的一段時(shí)間,在實(shí)際的項(xiàng)目中使用的頻率也很高。對此有了一些積累,希望通過這個(gè)新的系列和廣大網(wǎng)友一起分享和交流。本系列假設(shè)讀者已經(jīng)對Enterprise Library有一定的了解,故而不會(huì)對各個(gè)Application Block的基本原理和編程模型進(jìn)行介紹,而把側(cè)重點(diǎn)放在Enterprise Library深層次的實(shí)現(xiàn)原理、設(shè)計(jì)模式的應(yīng)用、有效擴(kuò)展和最佳實(shí)踐上。
[第1篇]:通過Unity Extension實(shí)現(xiàn)和Policy Injection Application Block的集成
PIAB是基于Remoting的原理通過Method Interception的方式實(shí)現(xiàn)了AOP(而另一種常見的方式是基于IL Injection)。要使應(yīng)用在目標(biāo)對象的CallHandler發(fā)揮作用,需用通過PolicyInjecctor(默認(rèn)為Remoting PolicyInjection)進(jìn)行對象的創(chuàng)建。而實(shí)現(xiàn)Unity和PIAB集成的途徑就是讓Unity Container使用進(jìn)行對象的創(chuàng)建。
Unity是建立在ObjectBuilder之上的,而ObjectBuilder是整個(gè)Enterprise Library以及P&P其他開源框架(比如Smart Client Software Factory)的基石。ObjectBuilder,顧名思義,就是進(jìn)行對象創(chuàng)建的組件。而ObjectBuilder進(jìn)行對象創(chuàng)建的方式是基于策略的(Strategy based object creation),他通過將不同的策略運(yùn)用到對象創(chuàng)建(或釋放回收)的不同的階段,而從提供了一個(gè)功能強(qiáng)大的、極具擴(kuò)展的對象創(chuàng)建的框架。而要實(shí)現(xiàn)我們的目標(biāo),首先需要?jiǎng)?chuàng)建自定義的BuilderStrategy…
[第2篇]:通過SqlDependency實(shí)現(xiàn)Cache和Database的同步
對于一個(gè)真正的企業(yè)級(jí)的應(yīng)用來說,Caching肯定是一個(gè)不得不考慮的因素,合理、有效地利用Caching對于增強(qiáng)應(yīng)用的Performance(減少對基于Persistent storage的IO操作)、Scalability(將數(shù)據(jù)進(jìn)行緩存,減輕了對Database等資源的壓力)和Availability(將數(shù)據(jù)進(jìn)行緩存,可以應(yīng)對一定時(shí)間內(nèi)的網(wǎng)絡(luò)問題、Web Service不可訪問問題、Database的崩潰問題等等)。Enterprise Library的Caching Application Block為我們提供了一個(gè)易用的、可擴(kuò)展的實(shí)現(xiàn)Caching的框架。借助于Caching Application Block,Administrator和Developer很容易實(shí)現(xiàn)基于Caching的管理和編程。由于Caching的本質(zhì)在于將相對穩(wěn)定的數(shù)據(jù)常駐內(nèi)存,以避免對Persistent storage的IO操作的IO操作,所以有兩個(gè)棘手的問題:Load Balance問題;Persistent storage和內(nèi)存中數(shù)據(jù)同步的問題。本篇文章提供了一個(gè)解決方案通過SqlDependency實(shí)現(xiàn)SQL Server中的數(shù)據(jù)和Cache同步的問題。
[第3篇]: 倘若將Unity、PIAB、Exception Handling引入MVP模式
最近在做一個(gè)Smart Client Software Factory的項(xiàng)目。熟悉SCSF或者CAB的都應(yīng)該很清楚MVP這種設(shè)計(jì)模式。MVP是MVC的一種變體,View和Mode分別關(guān)注于UI的呈現(xiàn)和業(yè)務(wù)模型,View和Mode完全分離,View通過Presenter實(shí)現(xiàn)對業(yè)務(wù)模型的訪問,Presenter“間接”地調(diào)用View實(shí)現(xiàn)對UI的操作。對于MVP中的異常處理,我們是直接通過Enterprise Library的Exception Handling Application Block來實(shí)現(xiàn)的。具體的做法是:在View中的每個(gè)控件的事件中添加try/catch block, 并在catch中通過ExceptionPolicy實(shí)現(xiàn)對異常的處理。這樣導(dǎo)致的問題是,相同的代碼重復(fù)散布于整個(gè)應(yīng)用的各個(gè)角落,所以我又這樣的想法:通過Policy Injection以AOP的方式實(shí)現(xiàn)對異常的處理,當(dāng)有了這個(gè)想法后,我又多想了一步,何不再將Unity也一并整合進(jìn)來?
[第4篇]: 創(chuàng)建一個(gè)自定義Exception Handler改變ELAB的異常處理機(jī)制
微軟Enterprise Library ELAB(Exception Handling Application Block)提供了一種基于策略(Policy)的異常處理方式,在不同的環(huán)境中,比如多層架構(gòu)中不同的層次中,我們可以定義不同的異常處理策略。對于ELAB來說,Exception Handling Policy = Exception Type + Exception Handler(s) ,也就是說異常處理策略規(guī)定了對于某種類型的類型需要通過那些Exception Handler去處理。從這種意義上講,ELAB的異常處理機(jī)制是基于Exception Type的,異常的類型是我們處理異常的最小粒度。對于一個(gè)確定的異常處理策略,在不同場合拋出的同種類型的異常,都會(huì)使用相同的Exception Handler去處理。舉個(gè)例子,對于一個(gè)基于SQL Server的Data Access操作,對于數(shù)據(jù)庫連接失敗和違反數(shù)據(jù)一致性約束,都會(huì)拋出SqlException。這兩種情況對于ELAB都是等效的,因?yàn)樗荒芨鶕?jù)異常的類型進(jìn)行異常處理。
在很多情況下,這種基于異常類型級(jí)別的異常處理并不能解決我們實(shí)際異常處理的問題。我們往往需要粒度更細(xì)的異常處理機(jī)制:對于拋出的同一種類型的異常,根據(jù)異常對象具體的屬性值進(jìn)行相應(yīng)的異常處理。
[第5篇]: 創(chuàng)建一個(gè)簡易版的批處理執(zhí)行器,認(rèn)識(shí)Enterprise Library典型的配置方式和對象創(chuàng)建方式
這個(gè)工具執(zhí)行一組批處理,也可以看成是一個(gè)Sequential Workflow的執(zhí)行器,我把它成為Batch Job Executor。在使用Batch Job Executor過程中,通過配置可以對批處理的每個(gè)步驟、或者是Workflow的每個(gè)Activity進(jìn)行自由地定義。從功能上將,這個(gè)小工具僅僅是個(gè)小玩意兒,不登大雅之堂。 不過考慮到Batch Job Executor的涉及和實(shí)現(xiàn)是基于Enterprise Library典型的實(shí)現(xiàn)方式,比如基于EL的配置和對象創(chuàng)建方式,對于那些希望進(jìn)一步了解EL的讀者,或許可以通過這個(gè)小小的例子一窺EL的設(shè)計(jì)原理。對于那些EL的設(shè)計(jì)不時(shí)很了解的讀者,對于以下的內(nèi)容,可能在理解上可能比較困難。最好是下載源代碼,結(jié)合下面的介紹,希望會(huì)幫助了更好的理解EL。(Source Code 下載:http://files.cnblogs.com/artech/Artech.BatchJobExecutor.zip)
[第6篇]: 自己動(dòng)手創(chuàng)建迷你版AOP框架
基于Enterprise Library PIAB的AOP框架已經(jīng)在公司項(xiàng)目開發(fā)中得到廣泛的使用,但是最近同事維護(hù)一個(gè)老的項(xiàng)目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用。為了解決這個(gè)問題,我寫了一個(gè)通過方法劫持(Method Interception)的原理,寫了一個(gè)簡易版的AOP框架。
[第7篇]: 再談PIAB與Unity之間的集成
在EnteLib中,PIAB(Policy Injection Application Block)和Unity的定位是輕量級(jí)的AOP框架和IoC容器(Container)。通過PIAB,我們可以將一些業(yè)務(wù)無關(guān)的crosscutting concern定義于相應(yīng)的CallHandler中,通過Attribute聲明或者配置應(yīng)用到承載業(yè)務(wù)邏輯的目標(biāo)方法上。而通過Unity提供的IoC容器(或者DI容器),即UnityContainer,很好地實(shí)現(xiàn)了依賴的動(dòng)態(tài)注入,從而實(shí)現(xiàn)了組件之間、模塊之間或者服務(wù)之間的松耦合。
Unity完全建立在ObjectBuilder2之上,顧名思義,這是一個(gè)用于創(chuàng)建對象的基礎(chǔ)組件。ObjectBuilder2提供了一種具有高可擴(kuò)展性的、基于策略(Strategy Based)的對象創(chuàng)建框架,它不僅僅是Unity的基礎(chǔ)組件,也是整個(gè)EnterLib和Software Factory的基石。而PIAB通過方法調(diào)用劫持(Method Call Interception)的機(jī)制實(shí)現(xiàn)了策略注入(Policy Injection)。PIAB提供了不同的方法劫持機(jī)制,最為典型的就是基于TransparentProxy(可以參考我的PIAB系列文章)和代碼生成(比如動(dòng)態(tài)生成一個(gè)繼承自目標(biāo)類型的子類,通過Override掉相應(yīng)的Virtual方法實(shí)現(xiàn)策略注入;或者動(dòng)態(tài)生成一個(gè)實(shí)現(xiàn)了目標(biāo)接口的類型,實(shí)現(xiàn)相應(yīng)的方法實(shí)現(xiàn)策略注入)。PIAB需要通過特殊的機(jī)制創(chuàng)建可被劫持(Interceptable)對象,而UnityContainer本質(zhì)上是一個(gè)創(chuàng)建對象的容器,如果能夠使UnityContainer按照PIAB的要求創(chuàng)建可被劫持(Interceptable)對象,那么就能實(shí)現(xiàn)兩者之間的集成。(Source Code從這里下載)
[第8篇]: WCF與Exception Handling AppBlock集成[上篇][下篇]
在《WCF技術(shù)剖析(卷1)》的最后一章,我給出了一個(gè)具體的應(yīng)用WCF的分布式應(yīng)用實(shí)例,我把這個(gè)實(shí)例命名為PetShop。在這個(gè)例子中,我利用WCF的擴(kuò)展實(shí)現(xiàn)了一些設(shè)計(jì)、架構(gòu)模式,比如AOP、IoC等。看過本書的讀者,一定還記得我還通過WCF擴(kuò)展實(shí)現(xiàn)了于微軟企業(yè)庫(Enterprise Library)異常處理應(yīng)用塊(Exception Handling Application Block:EHAB)的集成。當(dāng)時(shí)由于缺乏相應(yīng)的背景知識(shí),不可能介紹具體的實(shí)現(xiàn),現(xiàn)在我們可以詳細(xì)來講述這是如何實(shí)現(xiàn)的。 (Source Code從這里下載)
?
作者:蔣金楠
微信公眾賬號(hào):大內(nèi)老A
微博:www.weibo.com/artech
如果你想及時(shí)得到個(gè)人撰寫文章以及著作的消息推送,或者想看看個(gè)人推薦的技術(shù)資料,可以掃描左邊二維碼(或者長按識(shí)別二維碼)關(guān)注個(gè)人公眾號(hào)(原來公眾帳號(hào)蔣金楠的自媒體將會(huì)停用)。
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 原文鏈接
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的《Enterprise Library深入解析与灵活应用》博文系列汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python excel 操作
- 下一篇: ORACLE REPLACE函数