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

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

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

  【1】面向?qū)ο笤O(shè)計原則OO:

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

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

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

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

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

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

  【2】服務(wù)契約繼承:

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

  【2.1】服務(wù)端契約層級:

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

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

  【3】服務(wù)契約分解概念:

     下面我們繼續(xù)講解服務(wù)契約設(shè)計的一些概念知識。其實服務(wù)契約的設(shè)計在WCF分布式應(yīng)用項目中屬于比較重要的部分。服務(wù)契約的設(shè)計和實現(xiàn)相對來多比較復(fù)雜,除了注意已有的設(shè)計原則之外還要注意WCF契約相關(guān)的特性。面向服務(wù)分析與設(shè)計的屬于一個較新的領(lǐng)域。實際的服務(wù)分析和設(shè)計我們還是借助于已有的經(jīng)驗和原則,來指我們更好地設(shè)計服務(wù)契約。這也是本節(jié)給出一個面向?qū)ο笾匾O(shè)計原則的原因。

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

  【4】服務(wù)契約分解原則:

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

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

  【5】服務(wù)契約分解代碼分析:

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

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

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

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

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

主站蜘蛛池模板: 日本高清视频www | 污视频在线看网站 | 东京加勒比中文字幕波多野结衣 | 国产一区二区在免费观看 | 自拍三级| 欧美天天影院 | 精品视频在线免费 | 激情在线视频 | 亚洲综合色播 | 久久精品一区 | 色哟哟哟在线观看www | 91久久亚洲国产成人精品性色 | 亚洲免费二区三区 | 视频一区在线观看 | 在线资源观看 | 亚洲第一成人在线 | 国产黄色小视频 | 国产午夜精品一区二区 | 国产三级欧美 | 狠狠干狠狠干狠狠干 | 日本成人福利视频 | 日本www免费 | 国产午夜精品福利久久 | 91麻豆文化传媒有限公司 | 中文精品久久久久国产网址 | 日本又黄又硬又粗好爽视频免费 | 黄色网址 在线播放 | 国产第一第二第三第四第五 | 中国女人一级毛片 | 久久国产精品偷 | 曰曰啪天天拍视频在线 | 91精品综合| 婷婷丁香五月中文字幕 | 华人亚洲欧美精品国产 | 91小视频在线观看免费版高清 | 国产原创91 | 国产免费久久精品99久久 | 思思玖玖玖在线精品视频 | 色免费视频 | 国产一区二区三区在线影院 | 国产精品伦子一区二区三区 |