天天躁日日躁狠狠躁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服務契約繼承與分解設計,轉載需保留來源!

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

主站蜘蛛池模板: 神马电影我不卡国语版 | 亚洲午夜性春猛交XXXX | 精品视频在线一区 | 红尘影院手机在线观看 | 在线视频网站www色 在线视频免费国产成人 | 国产扒开美女双腿屁股流白浆 | 精品国产九九 | 蜜桃精品成人影片 | 午夜精品国产自在现线拍 | 天美传媒色情原创精品 | 久久午夜夜伦痒痒想咳嗽P 久久午夜夜伦鲁鲁片无码免费 | 116美女写真成人午夜视频 | 少妇大荫蒂毛多毛大 | 伊人久久精品AV无码一区 | 夜色爽爽爽久久精品日韩 | 亚洲综合中文字幕无线码 | 欧美日韩亚洲综合2019 | 窝窝影院午夜看片毛片 | 囯产精品久久久久久久久免费蜜桃 | 伊人久久综合网站 | 国产在线精品一区二区在线看 | 午夜福利体检 | 花蝴蝶hd免费 | 色综合久久88一加勒比 | 亚洲精品成A人在线观看 | 野花日本高清在线观看免费吗 | 高h 纯肉文 | 恋夜影院支持安卓视频美女 | 日本不卡一二三 | 欧美高清video mr.sexo | 久久天天躁狠狠躁夜夜呲 | 婷婷午夜影院 | 古装性艳史电影在线看 | 嫩草AV久久伊人妇女 | 国产免费69成人精品视频 | 亚洲国语在线视频手机在线 | HEYZO精品无码一区二区三区 | 亚洲裸舞 hd | 欧美精品九九99久久在观看 | 国产精品久久久久a影院 | 韩国羞羞秘密教学子开车漫书 |