moco代碼賞析一

本次主要是賞析作者的第一次提交intialized project辰如,這次提交主要把項(xiàng)目的雛形搭建起來(lái)和單元測(cè)試兩部分內(nèi)容嘱腥。


先從項(xiàng)目的組織框架來(lái)看殿雪,項(xiàng)目共有八個(gè)類(lèi)钧栖,其中Moco類(lèi)是入口嘿悬,有server()方法和running()方法实柠,server()方法的作用是新創(chuàng)建一個(gè)MocoServer對(duì)象并返回,running()方法則是啟動(dòng)該MocoServer對(duì)象善涨。MocoServer類(lèi)是服務(wù)器類(lèi)窒盐,有啟動(dòng)、停止钢拧、response等方法蟹漓。MocoHandler類(lèi)繼承了SimpleChannelHandler類(lèi),重寫(xiě)了messageReceived()方法娶靡,當(dāng)收到request后牧牢,負(fù)責(zé)把RequestSetting寫(xiě)入response返回。RequestSetting姿锭、BaseRequestSetting塔鳍、AnyRequestSetting、URIRequestSetting呻此、ContentRequestSetting這五個(gè)類(lèi)的關(guān)系如下:

image

其中三個(gè)RequestSetting實(shí)現(xiàn)類(lèi)是針對(duì)不同的request輸入類(lèi)型或不同的請(qǐng)求方式轮纫,所做的三種不同的處理方法。


下面看一些具體的代碼焚鲜,

    public void response(String response) {
        new AnyRequestSetting(this).response(response);
    }

    public BaseRequestSetting withContent(String requestContent) {
        return new ContentRequestSetting(this, requestContent);
    }

    public BaseRequestSetting withUri(String uri) {
        return new UriRequestSetting(this, uri);
    }

這三個(gè)方法分別對(duì)應(yīng)Request中的三種不同的輸入或請(qǐng)求方式:get請(qǐng)求掌唾、post請(qǐng)求放前、輸入為uri(addrA/addrB)。根據(jù)不同的輸入糯彬,new出來(lái)不同的RequestSetting對(duì)象裝入response中凭语。

RequestSetting的五個(gè)類(lèi)中多次運(yùn)用了多態(tài),如:RequestSetting中的addToServer()抽象方法撩扒,在BaseRequestSetting中得到了重寫(xiě)似扔、BaseRequestSetting中match()方法是個(gè)抽象方法,三個(gè)實(shí)現(xiàn)類(lèi)分別重寫(xiě)了這個(gè)方法搓谆,擁有了針對(duì)不同的輸入的不同處理方法炒辉。

    public abstract boolean match(HttpRequest request);
    public boolean match(HttpRequest request) {
        return true;
    }
    public boolean match(HttpRequest request) {
        long contentLength = HttpHeaders.getContentLength(request);
        ChannelBuffer contentBuffer = request.getContent();
        String content = contentBuffer.toString((int) (contentBuffer.capacity() - contentLength), (int) contentLength, Charset.defaultCharset());

        return content.equals(this.content);
    }
    public boolean match(HttpRequest request) {
        return (request.getUri().equals(uri));
    }

在這版代碼中,由于下兩段代碼中的isMatchAny被作者在三個(gè)RequestSetting的實(shí)現(xiàn)類(lèi)中均置為false泉手,所以有兩部分代碼是不會(huì)被訪問(wèn)的黔寇。我想作者這么做一定是有意為之,目的是為了針對(duì)不同的業(yè)務(wù)需求而做更好的擴(kuò)展斩萌,且等日后繼續(xù)看后面的代碼~

    if (requestSetting.isMatchAny()) {
        this.anyRequestSetting = requestSetting;
    }
    if (anyRequestSetting != null) {
        channel.write(createResponse(anyRequestSetting));
    } else {
        channel.write(new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST));
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缝裤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子术裸,更是在濱河造成了極大的恐慌倘是,老刑警劉巖亭枷,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袭艺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡叨粘,警方通過(guò)查閱死者的電腦和手機(jī)猾编,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)升敲,“玉大人答倡,你說(shuō)我怎么就攤上這事÷康常” “怎么了瘪撇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)港庄。 經(jīng)常有香客問(wèn)我倔既,道長(zhǎng),這世上最難降的妖魔是什么鹏氧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任渤涌,我火速辦了婚禮,結(jié)果婚禮上把还,老公的妹妹穿的比我還像新娘实蓬。我一直安慰自己茸俭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布安皱。 她就那樣靜靜地躺著调鬓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酌伊。 梳的紋絲不亂的頭發(fā)上袖迎,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音腺晾,去河邊找鬼燕锥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悯蝉,可吹牛的內(nèi)容都是我干的归形。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鼻由,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暇榴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蕉世,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蔼紧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后狠轻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奸例,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年向楼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了查吊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湖蜕,死狀恐怖逻卖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昭抒,我是刑警寧澤评也,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站灭返,受9級(jí)特大地震影響盗迟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婆殿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一诈乒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婆芦,春花似錦怕磨、人聲如沸喂饥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)员帮。三九已至,卻和暖如春导饲,著一層夾襖步出監(jiān)牢的瞬間捞高,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工渣锦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硝岗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓袋毙,卻偏偏與公主長(zhǎng)得像型檀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子听盖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理胀溺,服務(wù)發(fā)現(xiàn),斷路器皆看,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,934評(píng)論 6 13
  • 從三月份找實(shí)習(xí)到現(xiàn)在仓坞,面了一些公司,掛了不少腰吟,但最終還是拿到小米无埃、百度、阿里蝎困、京東录语、新浪、CVTE禾乘、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,218評(píng)論 11 349
  • 交纏在一起的舌 舔舐著甜味的津 內(nèi)心的火焰在纏綿 ------ 啊呸 啊呸 溫柔鄉(xiāng)被抹去了經(jīng)緯 怕過(guò)嗎 怕過(guò) 世間...
    長(zhǎng)舌婦閱讀 290評(píng)論 0 2
  • 利用清明假期的時(shí)間始藕,我終于把老可的《拼的是現(xiàn)在,比的是將來(lái)》讀完了氮趋,說(shuō)起這本書(shū)伍派,帶給我最大的感觸有以下幾點(diǎn): 1、...
    青鳥(niǎo)的天空727閱讀 647評(píng)論 0 1