欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
什么是框架(續)?

本文是《什么是框架》的續集, 新來(lái)的同學(xué)可以先看看那一篇文章。


張大胖聽(tīng)大神Bill講解了框架的作用,回去思考了兩天,茅塞頓開(kāi)。


框架只是一個(gè)半成品而已, 這個(gè)半成品當中固化了很多最佳的實(shí)踐, 開(kāi)發(fā)人員必須把自己的代碼填充到框架當中才能成為一個(gè)完整的應用程序。


說(shuō)起來(lái)簡(jiǎn)單,  到底怎么“填充”呢 ?  碼農們寫(xiě)出來(lái)的代碼怎么才能讓框架知道, 并且調用呢?


張大胖本來(lái)想找Bill 問(wèn)個(gè)明白,  但轉眼一想, 自己要是能思考出結果豈不更加印象深刻? !


他的腦子開(kāi)始熱身,迅速進(jìn)入高速運轉狀態(tài),  叮的一聲, 一個(gè)想法跨入他的腦海: 可以用繼承??!


框架定義一些抽象類(lèi)(如Java 中的abstract class ) 讓具體的應用代碼去繼承, 抽象類(lèi)的好處是可以寫(xiě)具體方法, 也可以只聲明抽象方法而不實(shí)現 -- 具體的實(shí)現肯定要留給碼農們的應用程序了。


在抽象類(lèi)的具體方法中,可以處理一些框架公用的邏輯, 然后調用那些子類(lèi)應該實(shí)現的抽象方法, 這不就把框架和應用結合起來(lái)了嗎?


嗯, 這不就是我上周看過(guò)的一個(gè)著(zhù)名的設計模式: 模板方法嗎? 用在此處挺合適的嘛, 大胖不由的一陣得意, 似乎是自己重新發(fā)明了這個(gè)設計模式。


(注: Action 為抽象類(lèi), doBusiness 為抽象方法, 其他為具體方法)


張大胖馬上向Bill匯報自己的新發(fā)明,  Bill 鼓勵到: “你小子開(kāi)竅了啊, 這的確是一個(gè)辦法, 著(zhù)名的MVC框架struts1 就是這么干的, 還有JUnit的早期版本,更早的EJB1.x, 2.x 都是這樣,  都需要自己的業(yè)務(wù)類(lèi)/測試類(lèi)去繼承一個(gè)框架的抽象類(lèi), 實(shí)現抽象方法才可以。


張大胖知道Bill的習慣是先揚后抑, 靜靜的等待著(zhù)轉折。


“但是,” 轉折果然如期而至, “ 這種方法讓人感到不爽,業(yè)務(wù)類(lèi)比較死板 , 比如你必須得用框架規定的方法名, 沒(méi)法自己定制。例如JUnit的早期版本, 測試用例的初始化方法必須得叫Setup,  銷(xiāo)毀方法必須是TearDown,    你想換成init/destroy 是肯定不行的, 因為框架根本不知道。 ”


張大胖說(shuō): “這沒(méi)什么啊, 我覺(jué)得還是比較好的編程實(shí)踐呢, 大家都保持名稱(chēng)一致,可讀性很好啊”


“其實(shí)你往深處想想就會(huì )明白, 這種方式其實(shí)讓你的業(yè)務(wù)類(lèi)和框架綁定了! 這是最要命的。 你的例子中抽象類(lèi)是Action , 如果這個(gè)Action 很‘重’ ,依賴(lài)HttpServletRequest/HttpServletResponse,   必須得有一個(gè)Web容器(Tomcat)才能創(chuàng )建起來(lái), 那你的LoginAction 可就悲催了, 想要做個(gè)單元測試必須得把Tomcat跑起來(lái)才行。 ”


張大胖說(shuō):“聽(tīng)你這么一解釋?zhuān)?我明白了,這種繼承的方式問(wèn)題很大啊。 是不是可以這么說(shuō), 框架和業(yè)務(wù)類(lèi)最好是獨立變化, 中間用一座橋來(lái)連接起來(lái)?!?/p>


Bill 贊許道 : “對,  你想想這個(gè)橋用什么‘材料’做比較好?”


張大胖撓撓頭,一臉懵逼。


“回到原始的問(wèn)題, 我們不就是試圖讓框架把我們的業(yè)務(wù)類(lèi)創(chuàng )建起來(lái),然后調用特定的方法嗎?  完全不用在代碼中寫(xiě)死, 可以采用別的聲明式的辦法啊”   Bill  循循善誘。


“難道在代碼中寫(xiě)注釋?zhuān)? ”  張大胖繼續一臉懵逼。


“注釋都是純文本, 不是結構化的信息啊, 難道你讓框架讀取文本,然后做個(gè)語(yǔ)義分析? 根本不可能, 更何況注釋在編譯過(guò)的class中間已經(jīng)不復存在了,無(wú)處可尋, 框架怎么讀?   再想想”  Bill急得就差自己公布答案了。


“啊, 我知道了,你剛才說(shuō)的結構化信息提醒了我,  可以用XML啊, XML來(lái)描述結構化東西很擅長(cháng)! ”


張大胖說(shuō)著(zhù)還寫(xiě)了個(gè)例子出來(lái): “通過(guò)用XML來(lái)描述, 框架就可以找到相關(guān)的類(lèi)和方法,就可以調用了”



'是的, 你舉了一個(gè)小例子, 實(shí)際上由于XML的擴展性, 能描述極為復雜的語(yǔ)義,很多框架都會(huì )制定規則, 讓碼農們去‘聲明’自己的業(yè)務(wù)類(lèi)及其方法。 '


“這種聲明的方式真是不錯,業(yè)務(wù)類(lèi)不用繼承框架的抽象類(lèi)了,我剛想到一個(gè)問(wèn)題, 我們的Java類(lèi)和XML配置不在一起,  當我們想知道一個(gè)類(lèi)的方法,字段是怎么被框架使用的時(shí)候,還得回過(guò)頭來(lái)查看XML, 這實(shí)在不爽。 ” 張大胖問(wèn)道。


“這是個(gè)好問(wèn)題, 那就把這種‘聲明’信息挪到Java 類(lèi)中去吧!”  Bill 說(shuō)。


“你剛才說(shuō)了不能用注釋?zhuān)?怎么在Java 文件中寫(xiě)‘聲明’ ???”


“沒(méi)有注釋?zhuān)?可以有注解??! ”


“你是說(shuō)那個(gè)@author, @version, @return, @see這樣用來(lái)生成Java文檔的注解嗎? 還有什么@Override,@Deprecated, 我從來(lái)都不用?!?/p>


Bill 笑了: “那只是Java內置的一些注解, 現在Java可以自定義注解了, 我們完全可以利用這種注解來(lái)聲明框架想用的信息, 我給你舉個(gè)例子:”



張大胖問(wèn)道: “@Controller, @ReqeustMapping, @RequestParam 都是框架自定義的注解?“


“是的, 你可以直接在Java 代碼中使用, 在運行時(shí)框架能讀取這些注解, 就知道你想干什么事情了?!?/p>


“ 嗯,所有的信息都在Java 中了, 比XML看起來(lái)更簡(jiǎn)潔一些, 果然是十分酸爽?!?張大胖十分感慨 ,“不過(guò),這樣一來(lái)聲明式的信息又四處分散,維護又不方便了。 ”


Bill說(shuō): “哪有十全十美的東西? 在編程中根據情況選擇吧!”


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
webservice學(xué)習,個(gè)人經(jīng)驗,好文(轉)
Java 注解指導手冊 – 終極向導
十年架構師不到400行手寫(xiě)一個(gè)Spring MVC
神奇的Hook機制,一文讀懂AOP編程
一個(gè)計算機專(zhuān)業(yè)學(xué)生幾年的編程經(jīng)驗匯總
集成測試 spring3
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久