成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

.NET項(xiàng)目開發(fā)—淺談面向?qū)ο蟮目v橫向關(guān)系、多態(tài)入口,單元測(cè)試(項(xiàng)目小結(jié))

閱讀目錄:

成都創(chuàng)新互聯(lián)專注于古城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供古城營(yíng)銷型網(wǎng)站建設(shè),古城網(wǎng)站制作、古城網(wǎng)頁(yè)設(shè)計(jì)、古城網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造古城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供古城網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

  • 1.開篇介紹

  • 2.使用委托消除函數(shù)串聯(lián)調(diào)用

    • 2.1.使用委托工廠轉(zhuǎn)換兩個(gè)獨(dú)立層面的對(duì)象

  • 3.多態(tài)入口(面向?qū)ο罄^承體系是可被擴(kuò)展的)

  • 4.多態(tài)的受保護(hù)方法的單元測(cè)試(Protected成員的單元測(cè)試)

1】開篇介紹

一如既往,這篇文章是我最近在工作中總結(jié)出的一點(diǎn)小小的經(jīng)驗(yàn),特此寫出來與大家分享,因?yàn)槲矣X得日常開發(fā)中這些點(diǎn)點(diǎn)滴滴很有用;

2】使用委托消除函數(shù)串聯(lián)調(diào)用

在一般的函數(shù)調(diào)用情況下,我們都習(xí)慣性的將參數(shù)傳入到某個(gè)被調(diào)用的方法,這可能就是我們考慮調(diào)用方法的慣用思維,但是現(xiàn)在的C#語(yǔ)言得到了很大的提升,我們可以很自然的使用委托來減少函數(shù)之間的參數(shù)依賴;有時(shí)候會(huì)經(jīng)??匆娨粋€(gè)函數(shù)的內(nèi)部邏輯并沒有使用到傳入的某個(gè)參數(shù),而傳入的真正目的是為了再傳入到本函數(shù)需要調(diào)用的另外一個(gè)函數(shù)中去;

圖1:

.NET項(xiàng)目開發(fā)—淺談面向?qū)ο蟮目v橫向關(guān)系、多態(tài)入口,單元測(cè)試(項(xiàng)目小結(jié))

這個(gè)時(shí)候我們可以試著使用委托來封裝調(diào)用的方法,然后將委托實(shí)例傳入到第一層使用的函數(shù)中去,當(dāng)然要分清使用場(chǎng)景,不是所有的場(chǎng)景都合適;

圖2:

.NET項(xiàng)目開發(fā)—淺談面向?qū)ο蟮目v橫向關(guān)系、多態(tài)入口,單元測(cè)試(項(xiàng)目小結(jié))

當(dāng)然需要平衡好這里的內(nèi)聯(lián)變量ProductContent,如果可以的話盡量將委托放入到專門創(chuàng)建委托的委托工廠中去,這樣方便全局管理,甚至進(jìn)一步抽象就可以將委托移除程序硬編碼到配置文件;

2.1】使用委托工廠轉(zhuǎn)換兩個(gè)獨(dú)立層面的對(duì)象

一般情況下,我們?cè)趹?yīng)用層會(huì)通過數(shù)據(jù)訪問層的代碼獲取到數(shù)據(jù)源中的對(duì)應(yīng)數(shù)據(jù)實(shí)體,然后將其進(jìn)行DomainModel話,只有這樣我們才能使用到面向?qū)ο蟮膹?qiáng)大功能;這個(gè)時(shí)候我們只需將創(chuàng)建DomainModel的委托工廠構(gòu)造好,然后作為參數(shù)傳入到數(shù)據(jù)訪問接口中去;由于應(yīng)用層是全局協(xié)調(diào)層,它可以去完成多層之間的協(xié)調(diào)操作,所以對(duì)于應(yīng)用層的設(shè)計(jì)可以盡量飽滿一點(diǎn),而不是很簡(jiǎn)單的一個(gè)靜態(tài)方法集合,這樣就會(huì)使得Application Layer很薄;

3】多態(tài)入口(面向?qū)ο罄^承體系是可以被擴(kuò)展的)

很多時(shí)候我們?cè)谠O(shè)計(jì)一個(gè)框架的時(shí)候我們都會(huì)注意對(duì)象的繼承體系,但是我們基本上都沒有為這些內(nèi)部對(duì)象留有對(duì)外的擴(kuò)展入口;現(xiàn)假設(shè)你有一個(gè)框架內(nèi)部的類XmlConvert,該類被XmlConvertSetting全局靜態(tài)類引用著,如果不能通過XmlConvertSetting對(duì)XmlConvert進(jìn)行設(shè)置,就無法使用到XmlConvert的所有對(duì)外提供的擴(kuò)展方法;

public class XmlConvert
   {
       protected virtual string ConvertReplace(StringBuilder NodeString)
       {
           return NodeString.ToString().Replace("XXX", "LLL");
       }
   }

有一個(gè)很簡(jiǎn)單的XmlConvert類,是框架內(nèi)部使用的,現(xiàn)在它提供了一個(gè)Virtual方法ConvertReplace,我們想使用這個(gè)框架內(nèi)部的類進(jìn)行擴(kuò)展;

public class CustomerXmlConvert : XmlConvert
{
    protected override string ConvertReplace(StringBuilder NodeString)
    {
        return base.ConvertReplace(NodeString).Replace("JJJ", "AAA");
    }
}

但是如果未能提供給我們一個(gè)多態(tài)入口,我們這個(gè)自定義的CustomerXmlConvert無法起作用;最近發(fā)現(xiàn)很多自定義的框架設(shè)計(jì)上就有這個(gè)問題,留有了擴(kuò)展的類型和相應(yīng)的方法,但是無法插入到框架內(nèi)部去,所以特此分享一下;

4】多態(tài)的受保護(hù)方法的單元測(cè)試

受保護(hù)方法的單元測(cè)試一直都不太好解決,但是我們可以通過簡(jiǎn)單的繼承方式來輕松的處理,就拿上面提到的XmlConvert類來舉例;

public class XmlConvert
{
    protected virtual string ConvertReplace(StringBuilder NodeString)
    {
        return NodeString.ToString().Replace("XXX", "LLL");
    }
}

如果我們想測(cè)試它,直接使用類型繼承就可以:

[TestClass]
public class XmlConvertTests : XmlConvert
{
    [TestMethod]
    public void XmlConvert_ConvertReplace_Normal()
    {
        StringBuilder testData = new StringBuilder("XXXJJJ");
        string testResult = this.ConvertReplace(testData);
        Assert.AreEqual(testResult, "JJJ");
    }
}

這里有一個(gè)很好的設(shè)計(jì)啟發(fā)就是將方法碎片化盡量保持有返回值的操作,這樣很好的進(jìn)行Assert;其實(shí)提到單元測(cè)試,冥冥之中總覺得它與面向?qū)ο笥兄幻}相承的感覺,甚至單元測(cè)試、重構(gòu)、面向?qū)ο蠖紩?huì)起到互補(bǔ)的作用;

內(nèi)容不多,只是簡(jiǎn)單的項(xiàng)目小小的總結(jié),希望對(duì)大家有用,謝謝;

作者:王清培

出處:http://wangqingpei557.blog.51cto.com/

本文版權(quán)歸作者和51CTO共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

新聞標(biāo)題:.NET項(xiàng)目開發(fā)—淺談面向?qū)ο蟮目v橫向關(guān)系、多態(tài)入口,單元測(cè)試(項(xiàng)目小結(jié))
鏈接地址:http://jinyejixie.com/article12/poesgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站微信小程序、靜態(tài)網(wǎng)站App設(shè)計(jì)、虛擬主機(jī)、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
大连市| 桦南县| 仪征市| 平陆县| 平乐县| 达孜县| 连江县| 光泽县| 武夷山市| 安顺市| 陕西省| 曲靖市| 清新县| 津市市| 彰武县| 托克托县| 呼伦贝尔市| 清新县| 桐乡市| 崇信县| 江永县| 萍乡市| 正安县| 清河县| 上高县| 郁南县| 玛曲县| 颍上县| 会同县| 昭觉县| 屯留县| 汪清县| 淮北市| 齐河县| 衡阳市| 高要市| 泸州市| 马关县| 文昌市| 上饶县| 九台市|