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

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

主站蜘蛛池模板: 国产69精品麻豆久久久久 | 男人的天堂色偷偷 | 中字幕久久久人妻熟女天美传媒 | 欧美高清vivoesosexo18 | 青柠高清在线观看完整版 | 757一本到午夜宫 | 色色色久久久免费视频 | 免费黄色网址在线观看 | 99pao成人国产永久免费视频 | 在线亚洲专区中文字幕 | 欧美区 bt| 亚洲精品国产在线观看 | 日本在线免费播放 | 无码爽死成人777在线观看网站 | 一个人免费观看完整视频日本 | 久久青青草原精品国产软件 | 成人公开免费视频 | 99re 这里只有精品 | 日本又黄又爽又色又刺激的视频 | 老阿姨才是最有味的一区二区 | 一边摸一边桶一边脱免费 | 一级毛片免费视频网站 | 男人和女人一起愁愁愁很痛 | 男人到天堂a线牛叉在线 | 日本无码人妻丰满熟妇5G影院 | 美女扣逼软件 | 亚洲青青青网伊人精品 | 国产精选视频在线观看 | 俄罗斯乌克兰战争原因 | 四虎成人影院 | 亚洲黄色录像片 | FREE性丰满白嫩白嫩的HD | 国产成人精品男人的天堂网站 | 天海翼精品久久中文字幕 | 伊人久久大香线蕉综合电影 | 日本美女bb | 亚洲精品乱码电影在线观看 | 成人麻豆日韩在无码视频 | 亚洲国语在线视频手机在线 | 国产精品一区二区欧美视频 | 伊人久久大香线蕉综合99 |