一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

主站蜘蛛池模板: 国产激烈床戏无遮挡网站 | 五月激情综合婷婷 | 国产成人精品自线拍 | 欧美日本韩国一区二区 | 国产美女91视频 | 国产精品亚洲欧美一级久久精品 | 欧美激情不卡 | 欧美成人免费一级人片 | 香蕉97碰碰视频免费 | 亚洲欧美一级久久精品 | bt7086福利一区二区三区最新 | 2021国产精品 | 精品国产网红福利在线观看 | 精品视频免费在线观看 | 欧美一级高跟鞋鞋交 | 亚洲国产精品线播放 | 午夜精品乱人伦小说区 | 深爱激情婷婷 | 91视频免费视频 | 成人国产精品 | 狠狠色噜噜狠狠狠狠97不卡 | 簧片免费视频 | 激情五月婷婷丁香 | 日本一区二区三区免费观看 | 欧美激情国产一区在线不卡 | 国产成人小视频在线观看 | 亚洲一区中文字幕在线 | 99这里只有精品6 | 国产午夜视频在线观看第四页 | 伊人久久中文字幕 | 色爱区综合激月婷婷激情五月 | 国产男女免费视频 | 色哟哟在线免费观看 | 成人区精品一区二区不卡亚洲 | 五月婷综合 | www.xxxx欧美| 天天做天天爱夜夜爽 | 久久精品中文字幕第一页 | 97精品久久久久中文字幕 | 久久er精品视频 | 我色网|