天天看點

服務定位器(SL)與AgileEAS.NET中的實作

     首先說一下 ,或許我是個懶漢,部落格差不多已經一個月沒有寫了,給朋友們說聲抱歉,最近發生了很多事,南方洪水呀洪水,北方熱呀熱,蘭州遇到不知道多少年沒有遇到的40度高溫,其實說這些是扯談的事,還得要生活啊,原本已經睡下了,睡不着怕起來寫了這篇Post。

        言歸正傳,在設計子產品上有這麼一個子產品Service Locator模式,大概就是我叫他服務定位器的家夥,AgileEAS.NET平台服務定位器理論上也實作了這種模式,他做為對象控件反轉IOC的一個補充,共同完成對象(服務)的解耦工作。

         Service Locator模式的基本思想是:服務定位器知道如何獲得一個應用程式所需的所有服務。也就是說,在具體的應用中,服務消費者通過服務定位器獲得指定的服務實作,進而将服務消費者、服務定義與實際的服務實作代碼解耦,服務消費者可以在相同的接口上注冊不同的實作,進而可以不改變使用的代碼就能改變實作的功能。

         服務定位器的功能重點在于服務的解耦,而IOC容器的功能在于對象的解偶,從本質上,服務也是一種對象,理論上IOC容器也是可以完成服務的解偶合,但是在目前不同技術的分布式通信系統中,利用IOC解耦的成本會高一些,使用服務定位器解偶會更好一些,在AgileEAS.NET平台中服務定位器也提供了IOC解偶的實作,即可以對服務對象指向一IOC中的某個容器。

         上面的幾段話很繞,也有點找抽的感覺,如果說最簡單的了解就是用服務定位器隔離服務定位與服務的實作,使用者通過預先定義的服務接口和配置檔案實作服務接口與服務實作的剝離,服務實作在運作期通過服務定位器實作後期綁定。

         AgileEAS.NET平台中的服務定位器可以了解為服務定位器模式的實作,也可以了解為對企業應用中對不同服務(WebService、Remoting)的發現、定位與內建,從應用的角度來講,AgileEAS.NET平台的服務定位器更趨向于後者,下面我們來看看AgileEAS.NET平台中的服務定位器結構:

<a href="http://images.cnblogs.com/cnblogs_com/eastjade/WindowsLiveWriter/SLAgileEAS.NET_13335/EAS.ServiceLocator_2.png"></a>

         由上圖我們可以看出,AgileEAS.NET平台提供了XML WebService、.NET Remoting和本地服務元件三種服務定位器實作,下面我們來詳細看看IServiceLocator接口:

         由IServiceLocator接口我們可以知道,SL隻完成根據服務名稱及服務接口定義傳回指服務執行個體或者服務代理對象,供調用者使用。

         服務定位器設計中也充分應用接口驅動的思路,對系統提供的各種服務,需提供抽像的服務接口,服務消費者直接使用接口進行服務調用,而具體的服務實作則由服務定位器在運作時動态完成服務的發現與定位。

         目前AgileEAS.NET平台實作了XML WebService、.NET Remoting和本地服務元件的定位器,對于本地元件(服務)的定位被直接路由到IOC容器配置的服務元件中,對于XML WebService、.NET Remoting服務,可以被路由至IOC容器中的預先實作的服務代理元件,也可以直接由SL生成服務代理元件。

         AgileEAS.NET平台服務定位器通過配置檔案來隔離服務接口與服務實作,下面是一個SL配置檔案的示例:

         說到這,或許一部人已經知道是怎麼回事了,或許還有一部分人還在雲裡舞裡,其實我個人也不喜歡這種方式,自己說的陶醉聽的人雲裡舞裡,下文我将以一個簡單的例子示範使用SL統一本地服務元件、XML WebService、.NET Remoting服務調用的例子。

         最後打下廣告:

QQ群:120661978,125643764

<a href="http://www.cnblogs.com/eastjade/archive/2010/04/19/1715662.html">AgileEAS.NET之靈活并行開發方法</a>

<a href="http://www.agilelab.cn/">靈活軟體工程實驗室</a>

本文轉自 agilelab 51CTO部落格,原文連結:http://blog.51cto.com/agilelab/561919