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

主站蜘蛛池模板: 亚洲影视精品 | 免费大学生国产在线观看p 免费的成人a视频在线观看 | 视频亚洲一区 | 久久精品一区 | 国产激情视频趣趣在线观看的 | 色的视频网站 | 亚洲免费精品视频 | 激情小说 激情图片 | 在线精品国内视频秒播 | 亚洲精品国产网红在线 | 欧美日韩一区视频 | 日韩 亚洲 中文 图片 小说 | 亚洲首页 | 国产精自产拍久久久久久蜜 | 色在线播放 | 日韩一区二区三区中文字幕 | 精品一区二区三区四区五区六区 | 亚洲午夜国产精品无卡 | 国产日韩在线 | 亚洲第一综合网站 | 午夜免费在线观看 | 好吊妞haodiaokan| 亚洲成人一级片 | 麻豆一区二区三区四区 | 国产短视频精品区第一页 | h成人在线 | 欧美成人全部费免网站 | 国产91成人精品亚洲精品 | 怡红院免费va男人的天堂 | 毛片美女 | 国产精品午夜免费观看网站 | 国产亚洲一区二区在线观看 | 国产精品视频免费观看 | www.小视频| 四虎影视久久久免费 | 偷偷狠狠的日日2020 | 成年人国产视频 | 99精品福利 | 色在线视频播放 | 狠狠色噜噜狠狠狠狠97不卡 | 伊人久久大香线蕉资源 |