中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

WCF分布式開發步步為贏系列的(6):WCF服務契約繼承與分解設計

  上一節我們學習了WCF分布式開發步步為贏(5)服務契約與操作重載部分。今天我們來繼續學習WCF服務契約繼承和服務分解設計相關的知識點。WCF服務契約繼承有何優勢和缺點?實際項目里契約設計有什么原則和依據?面向對象的設計經驗有何值得借鑒的地方?這里我們會一一給出詳細的介紹。本文首先介紹的是WCF服務中契約繼承的一些概念、例子代碼分析,其次來講解服務契約的設計問題。首先介紹的也是進行服務設計的必要性,服務設計的原則,示例代碼分析。最后是全文的總結部分。結構如下:【1】OO面向對象設計原則,【2】服務契約繼承,【3】服務契約分解概念,【4】服務契約分解原則,【5】服務契約分解代碼分析,【6】總結。

  【1】面向對象設計原則OO:

   這里我們有必要先回顧一下面向對象的經典的設計原則。這些設計原則對我們WCF服務契約的設計來說有重要的參考價值。服務契約實際利用了接口來定義實現,語法類似,WCF框架也是基于現有的語言體系,對此擴展了編程模型,比如增加了屬性設置機制等。如果你曾經接觸過OO面向對象的這些概念,那么這些設計原則理解起來不會困難。很多編程書籍里都會有介紹,設計模式相關書籍里會有比較詳細的介紹。這里介紹幾個主要的概念,為下文的繼承和設計WCF服務契約部分作鋪墊:

  <1>單一職責原則(SRP): 一個類應該僅有一個引起它變化的原因。

  <2>開放封閉原則(OCP): 類模塊應該是可擴展的,但是不可修改(對擴展開放,對更改封閉)。

  <3>Liskov 替換原則(LSP): 子類必須能夠替換它們的基類。

  <4> 依賴倒置原則(DIP): 高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象。 抽象不應該依賴于實現細節,實現細節應該依賴于抽象。

  <5>接口隔離原則(ISP): 不應該強迫客戶程序依賴于它們不用的方法。

  【2】服務契約繼承:

  服務契約的定義和接口定義類似,接口可以繼承與多個接口。但是WCF契約屬性是不支持繼承的。由于WCF框架自身的問題,不支持契約屬性的繼承,因此這給我們服務契約屬性的聲明和使用卻有不少限制。在使用契約繼承屬性的過程中腰注意服務端契約的屬性繼承問題,此外就是客戶端添加服務引用后,無法還原服務端契約層級的關系,所有的操作契約由一個契約類封裝。因此實際編程我們要兼顧到兩個方面的情況。

  【2.1】服務端契約層級:

接口支持繼承。但ServiceContract特性不支持繼承的,我們查看其實現代碼可以知道Inherited = false,即不支持繼承,部分代碼如下:

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, Inherited =
false, AllowMultiple = false)]
    
public sealed class ServiceContractAttribute : Attribute
    {
        
    }

  【3】服務契約分解概念:

     下面我們繼續講解服務契約設計的一些概念知識。其實服務契約的設計在WCF分布式應用項目中屬于比較重要的部分。服務契約的設計和實現相對來多比較復雜,除了注意已有的設計原則之外還要注意WCF契約相關的特性。面向服務分析與設計的屬于一個較新的領域。實際的服務分析和設計我們還是借助于已有的經驗和原則,來指我們更好地設計服務契約。這也是本節給出一個面向對象重要設計原則的原因。

因為WCF服務契約的定義借助現有的編程語言如C#,契約設計實際首先就是對服務接口的設計。我們應該如何設計服務接口?如何知道服務接口中應該定義哪些操作?每個接口又應該包含多少操作?等等都是我們必須考慮的問題。Service Contract Factoring就是要考慮服務接口的分解問題。在面向服務的應用程序中,可重用的基本單元就是服務接口。因此如何設計服務接口就是重中之重。

  【4】服務契約分解原則:

這里我們設計服務接口時候即遵循單一職責和接口隔離等原則,又要考慮系統的開發成本。合理的接口是專業的、松耦合的、規則化和可重用的接口。這些優勢同樣有利于整個系統的松耦合和可重用等特性。總的來說,契約分解的目的就是使接口包含的更少操作。

如果我們定義了太多的細粒度服務接口,雖然它們易于實現,但集成它們的代價太高。如果我們僅定義了一個復雜的服務接口,雖然集成的成本會降低,但卻接口的實現和可維護性較差。我們設計面向服務的系統時,需要平衡兩個影響系統的因素,接口成本和集成成本。參見下圖。

  【5】服務契約分解代碼分析:

這里我們來講解一個簡單的服務契約設計的例子。這里我們還繼續使用交通車為例子進行講解。

我們首先定義一個接口交通工具IVehicle,定義了如下:

    [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
    
interface IVehicle
    {
        
//操作契約,跑,開的契約
        [OperationContract]
        
string Run();
        
//操作契約,拉人、載人的契約
        [OperationContract]
        
string Take();
        
//操作契約,運輸貨物的契約
        [OperationContract]
        
string Carry();
    }

NET技術WCF分布式開發步步為贏系列的(6):WCF服務契約繼承與分解設計,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产在线第一页 | aaa天堂| 不卡一区二区三区四区 | 亚洲国产一区二区三区在线观看 | 国产精品久久久久久久久久三级 | 欧美高清视频 | 欧美色性| 国产免费一级一级 | 激情欧美一区二区三区中文字幕 | 91资源在线 | 免费a级毛片在线播放 | 福利片在线看 | 麻豆国产一区二区三区四区 | 国产高清免费视频 | 黄色毛片免费看 | 久久久久国产 | 在线观看久草 | 亚洲欧美日韩一区二区 | 亚洲一区二区三区四区五区中文 | 欧美一级大片免费观看 | 亚洲精品美女在线观看 | 美日韩精品 | 国产小视频在线看 | 色偷偷人人澡人人爽人人模 | 国产成人综合久久 | 精品在线99 | 午夜精品久久久久久久久久久久 | 91精品国产91久久综合桃花 | 久久人人网 | 欧美一级淫片免费视频黄 | 99综合 | 久久久人成影片一区二区三区 | 中文字幕亚洲区一区二 | 免费的日批视频 | 午夜视频网站 | 国产在线观看一区二区 | 国产黄色大片在线观看 | 精品无码久久久久久国产 | av在线亚洲天堂 | 国产福利资源在线 | 伊人网一区 |