乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一個(gè).NET程序員為什么學(xué)習(xí)Ruby on Rails?(轉(zhuǎn) InfoQ)

       快樂(lè)學(xué)習(xí) 2007-05-17

      一個(gè).NET程序員為什么學(xué)習(xí)Ruby on Rails?

      作者 Stephen Chu譯者 戴強(qiáng)斌 發(fā)布于 2007年5月16日 下午9時(shí)30分

      社區(qū)
      .NET,
      Ruby
      主題
      動(dòng)態(tài)語(yǔ)言,
      變更,
      .NET框架,
      Ruby on Rails

      你是一位資深的.NET程序員,而且已經(jīng)用ASP.NET構(gòu)建過(guò)許多Web應(yīng)用。

      無(wú)數(shù)個(gè)不眠之夜,為了讓ASP.NET控件生命周期中的事件驅(qū)動(dòng)模型按你想要的方式執(zhí)行,你費(fèi)盡心血,深入細(xì)節(jié)。

      你精通于使用諸如Presentation Model、Model View Presenter這類(lèi)設(shè)計(jì)模式對(duì)你的應(yīng)用進(jìn)行分層,以使其更易測(cè)試和維護(hù)。

      你認(rèn)為Ruby on Rails只不過(guò)是眾多被吹噓的技術(shù)中的一員。在它還沒(méi)有獲得可觀的市場(chǎng)份額之前,你不會(huì)給予它過(guò)多的關(guān)注。

      歡迎來(lái)到我的世界。如果你還在讀這篇文章,我向你致敬。對(duì)于我下面的說(shuō)法,你可能會(huì)充滿(mǎn)了好奇。為什么我——一名資深的.NET程序員,在經(jīng)歷了一個(gè)月的Ruby on Rails學(xué)習(xí)后會(huì)認(rèn)為:只有在我了解了Ruby on Rails之后,才能以較少的時(shí)間和編碼完成以前開(kāi)發(fā)過(guò)的許多應(yīng)用?

      老實(shí)說(shuō),我仍然認(rèn)為.NET很棒。它為我提供了一個(gè)平臺(tái),能讓我向客戶(hù)源源不斷地提供巨大的商業(yè)價(jià)值。但我時(shí)刻提醒自己:一個(gè)簡(jiǎn)單的問(wèn)題,有大量不同的方法和技術(shù)可以解決它,并且總有一些比其它更好。衷情于某種技術(shù),必然會(huì)產(chǎn)生一些無(wú)意識(shí)的偏見(jiàn),這最終會(huì)阻礙我為客戶(hù)提供商業(yè)價(jià)值的能力。例如,對(duì)像Ruby這樣的動(dòng)態(tài)腳本語(yǔ)言的了解,使我以為:與使用編譯型的語(yǔ)言相比,我可以花費(fèi)更少的時(shí)間去編寫(xiě)簡(jiǎn)單的自動(dòng)處理的Batch/Shell腳本。

      為什么不呢?

      下面這幾件事,是我(一個(gè).NET程序員)學(xué)習(xí)Ruby時(shí),發(fā)現(xiàn)的一些典型的不同。希望你能喜歡。

      不需要編譯

      Ruby中沒(méi)有編譯的概念。一切都在運(yùn)行時(shí)發(fā)生作用。有人認(rèn)為代碼編譯可以防止編碼時(shí)的粗心。那么,你可能應(yīng)該去看一下測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是怎么工作的,連續(xù)的代碼集成(當(dāng)然了,不是每天都要構(gòu)建),單元測(cè)試(不涉及數(shù)據(jù)庫(kù)和web服務(wù)的測(cè)試)和依賴(lài)注入可以幫助你生成質(zhì)量良好的代碼,使你能夠充滿(mǎn)自信的靈活的改變你的代碼。編譯的保障作用一下子變的不那么重要了。

      動(dòng)態(tài)增加類(lèi)的行為——不使用Decorator模式

      在靜態(tài)類(lèi)型語(yǔ)言中,要想動(dòng)態(tài)增加類(lèi)的行為,我們可以使用Decorator模式或者模板方法。而在Ruby中,有更多的方法可以在不復(fù)雜化對(duì)象設(shè)計(jì)結(jié)構(gòu)的情況下,很簡(jiǎn)單地做到這一點(diǎn)。這只是因?yàn)檎Z(yǔ)言本身對(duì)它的支持,例如:將模塊作為minxin使用,使用class_eval, instance_eval方法等。事實(shí)上,甚至可以通過(guò)編程方式在運(yùn)行時(shí)定義類(lèi)的方法。在靜態(tài)類(lèi)型語(yǔ)言中,也可以通過(guò)代碼生成來(lái)完成它。但了解更多的方法,可以讓你向一個(gè)優(yōu)秀的問(wèn)題解決者邁進(jìn)一步。

      譯者注:mixin在面向?qū)ο缶幊陶Z(yǔ)言中是一種提供某些功能給子類(lèi)繼承的類(lèi),但mixin并不能實(shí)例化。從某個(gè)mixin繼承并不是什么特殊的形式,而它更適于收集功能。某個(gè)子類(lèi)甚至可以通過(guò)繼承一個(gè)或者多個(gè)mixin選擇繼承它的全部或者多數(shù)功能。一個(gè)mixin能延期到運(yùn)行時(shí)定義和綁定方法,而屬性和實(shí)例參數(shù)也可在編譯時(shí)才被定義。這不同于我們常見(jiàn)的方式,比如先定義所有的屬性、方法,并在編譯時(shí)進(jìn)行初始化等。)

      通過(guò)去除所有的類(lèi)型聲明和接口聲明,將代碼庫(kù)“瘦身”10-20%

      Ruby是一門(mén)動(dòng)態(tài)類(lèi)型語(yǔ)言。你不需要在使用變量之前聲明它的類(lèi)型,或者為方法簽名中的參數(shù)定義合適的類(lèi)型。這意味著你的代碼會(huì)變得更“瘦”,但這是以代碼難于調(diào)試和難于進(jìn)行錯(cuò)誤跟蹤為代價(jià)的,對(duì)嗎?并非如此,如果你相信單元測(cè)試和良好的面向?qū)ο笤O(shè)計(jì)的概念。如果你的類(lèi)小而緊湊,類(lèi)的方法短而精良,并且經(jīng)過(guò)了很好的單元測(cè)試,那么調(diào)試和錯(cuò)誤跟蹤將會(huì)很簡(jiǎn)單。

      及時(shí)Ajax化

      Ruby on Rails內(nèi)置對(duì)script.aculo.us庫(kù)的支持(script.aculo.us是一個(gè)Ajax類(lèi)庫(kù),里面包含了大量炫目的Ajax效果,使用這些效果,可以讓你的應(yīng)用更具有交互友好性)。在許多情況下,這相當(dāng)于在ASP.NET中將一個(gè)控件標(biāo)簽拖到html頁(yè)面上,然后在別的地方(在Rails中,這個(gè)地方是控制器)為其編寫(xiě)方法以處理Ajax在服務(wù)器端的Web請(qǐng)求。你的Web頁(yè)面支持Ajax功能,就像Google Suggest的autocomplete或者拖拉排序那樣。就這么簡(jiǎn)單。

      使用Rails,不需要專(zhuān)門(mén)的O/R映射

      使用命名慣例對(duì)數(shù)據(jù)庫(kù)的表和列以及你的領(lǐng)域模型對(duì)象命名,可以讓你忘記親自進(jìn)行O/R映射的痛苦。Ruby on Rails會(huì)為你實(shí)現(xiàn)這一切。在最簡(jiǎn)單的情況下,在視圖上增加一個(gè)字段并對(duì)它進(jìn)行持久化,你只需要在html中增加一個(gè)文本框并在相應(yīng)的數(shù)據(jù)庫(kù)表中增加一個(gè)新列,然后你就可以看到,新輸入的文字被存儲(chǔ)在了數(shù)據(jù)庫(kù)新建的列中。真的,就這么簡(jiǎn)單。

      用Ruby腳本構(gòu)建、部署或發(fā)布應(yīng)用,比使用NAnt更好。

      Rake是Ruby on Rails開(kāi)發(fā)中使用的標(biāo)準(zhǔn)構(gòu)建工具。Rake使用Ruby語(yǔ)法,這意味著在構(gòu)建和部署不同的應(yīng)用時(shí),你需要使用Ruby去編寫(xiě)你的構(gòu)建腳本。作為一門(mén)語(yǔ)言,Ruby在以下幾個(gè)方面尤為出色:處理字符串,文件和目錄的創(chuàng)建,高級(jí)的正則表達(dá)式支持。想一下,有多少次,你需要在批處理和NAnt腳本中執(zhí)行以下的操作:把服務(wù)器A上a目錄下所有以.sql為擴(kuò)展名的文件拷貝到服務(wù)器B,然后依次執(zhí)行這些文件。如果你討厭批處理腳本在編程方面的限制,或者不喜歡以NAnt中那樣的xml格式去編寫(xiě)腳本,你會(huì)喜歡Rake的。

      不勞無(wú)獲

      學(xué)習(xí)Ruby的時(shí)候,我必須克服許多障礙。首先,我不得不接受這樣的事實(shí):與正在使用的“舒適”的技術(shù)相比,尋找Ruby的解決方案,要花去我更多的時(shí)間。但是,用不了多久,你就會(huì)感到喜悅,因?yàn)槟憧梢杂么罅康姆绞浇鉀Q不同的問(wèn)題。其次,學(xué)習(xí)Ruby/Rails讓我受益非淺,通過(guò)學(xué)以致用,加深了對(duì)知識(shí)的理解。記住,對(duì)于你曾耗費(fèi)時(shí)間學(xué)過(guò)的東西,要么使用它,要么任其消逝。

      查看英文原文:Why Would a .NET Programmer Learn Ruby on Rails?
      作者簡(jiǎn)介:Stephen Chu 是ThoughtWorks的軟件開(kāi)發(fā)顧問(wèn),同時(shí)也是一位經(jīng)驗(yàn)豐富的.NET開(kāi)發(fā)人員,最近關(guān)注于Ruby on Rails。您可以通過(guò)他的博客閱讀他每天的新看法。

      譯者簡(jiǎn)介:戴強(qiáng)斌,擁有三年的Web開(kāi)發(fā)經(jīng)驗(yàn),武漢大學(xué)Google Camp技術(shù)團(tuán)隊(duì)成員,目前關(guān)注垂直搜索引擎領(lǐng)域的應(yīng)用發(fā)展。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多