基於DotNet構件技術的企業級敏捷式軟體開發 (Agile Software Development)平台 – AgileEAS.NET – 服務定位器(SL)與AgileEAS.NET中的實現

來源:互聯網
上載者:User

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

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

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

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

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

         AgileEAS.NET平台中的服務定位器可以理解為服務定位器模式的實現,也可以理解為對公司專屬應用程式中對不同服務(WebService、Remoting)的發現、定位與整合,從應用的角度來講,AgileEAS.NET平台的服務定位器更趨向於後者,下面我們來看看AgileEAS.NET平台中的服務定位器結構:

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

    /// <summary>    /// 服務定位器介面。    /// </summary>    public interface IServiceLocator    {        /// <summary>        ///  定位指定的服務。        /// </summary>        /// <param name="serviceName">服務名稱。</param>        /// <returns>服務(代理)對象。</returns>        object GetService(string serviceName);        /// <summary>        ///  定位指定的服務。        /// </summary>        /// <param name="serviceName">服務名稱。</param>        /// <param name="interfaceType">服務介面。</param>        /// <returns>服務(代理)對象。</returns>        object GetService(string serviceName, Type interfaceType);    }

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

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

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

         AgileEAS.NET平台服務定位器通過設定檔來隔離服務介面與服務實現,下面是一個SL設定檔的樣本:

<Service name="EAS.RMIService.Service" service-type="DotNetRemoting" singleton="true"  url="tcp://localhost:8000/EAS.RMIService"/><Service name="EAS.FileTransService.Service" service-type="WebService" singleton="true"  url="http://localhost:82/Distributed/RMIService.asmx"/><Service name="EAS.DataAccessService.Service" service-type="LocalComponent"  component="DataAccessor" />

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

QQ群:15118502

連結:AgileEAS.NET應用開發平台介紹

AgileEAS.NET之敏捷並行開發方法

敏捷軟體工程實驗室

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.