一区二区久久-一区二区三区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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 99久久亚洲 | 91精品国产丝袜 | 色www精品视频在线观看 | 国产精品视频第一区二区三区 | 国产精品国产三级国产专不∫ | 亚洲一区二区三区免费看 | 在线亚洲欧洲国产综合444 | 91在线入口 | 2021国产成人精品国产 | 亚洲美女视频网 | 天天色天天操综合网 | 欧美激情视频一区 | 亚洲小说欧美激情另类 | 亚洲人成人77777网站 | 亚洲国产成人在线视频 | 国产成人91高清精品免费 | 99国产精品高清一区二区二区 | 一区二区三区四区视频在线观看 | 免费伊人 | 精品国语对白精品自拍视 | 六月丁香六月婷婷 | 日本欧美一区二区三区视频麻豆 | 日韩欧美一区二区三区 | 九九视频在线看精品 | 2020国产成人免费视频 | 日本免费新一区二区三区 | 精品国产自在现线看久久 | 国产精品免费一区二区三区 | 精品久久久影院 | 美女视频网站黄色 | 国产成在线人视频免费视频 | 国产v精品成人免费视频71sao | 亚洲综合激情另类专区 | 久久大香香蕉国产免费网站 | 超清中文乱码精品字幕在线观看 | 亚欧色视频在线观看免费 | www.狠狠干| 四虎亚洲精品 | 日本xxxⅹ色视频在线观看网站 | 91国视频在线观看 | 黄 色 片 在 线 看 |