新聞資訊
記錄首創點滴進步 見(jiàn)證遠(yuǎn)行(xíng)
我們一(yī)直緊跟時(shí)代前沿,聚焦行(xíng±≈€™)業(yè)實時(shí)動态,發布公司最新資訊,歡迎您的(de)關注

做(zuò)軟件(jiàn)也(yě)要(yào)走“捷徑”

日(rì)期:2013-05-07發布:首創網絡浏覽:498次

    做(zuò)軟件(jiàn)也(yě)要(yào)走捷徑。程¶γ™序員(yuán)身(shēn)上(shàng)的(de)一(yī)個γ↓↓(gè)好(hǎo)笑(xiào)的(de)事(shì)情是(s‍₩ hì),我們在畢生(shēng)的(de)職業(yè)生(sh≥"¶ēng)涯中都(dōu)相(xiàng)信:我們的(de)工®←™(gōng)作(zuò)是(shì)告訴計(β♣×≠jì)算(suàn)機(jī)如(rú)何去(qù)做(zuò)×☆。 真實情況 真實情況是(shì),計(j₩λì)算(suàn)機(jī)能(néng)正确的(de)按照(zh€≥₹ào)命令去(qù)運行(xíng)。無論你(nǐ)寫的(de★₹≥>)是(shì)HelloWorld,計(‌©★jì)算(suàn)機(jī)都(dōu)能(néng)精确的(de)按照(∑→zhào)你(nǐ)的(de)命令去(qù)做(zuò)。 可(kě)我們的(βεde)工(gōng)作(zuò)···

    本文(wén)關鍵字:做(zuò),軟件(ji₩φ÷¶àn),也(yě),要(yào)走,“,捷徑,”,做(zγ₹uò),軟件(jiàn),也(yě)要(yào),

  做(zuò)軟件(jiàn)也(yě)要(γ>yào)走“捷徑”。程序員(y$ uán)身(shēn)上(shàng)的(de)一(yī)個(gè)好(hǎ✘€"o)笑(xiào)的(de)事(shì)情是(shì),我們λ←在畢生(shēng)的(de)職業(yè)生(shēng)涯中都(dō↓↓∞$u)相(xiàng)信:我們的(de)工(gōn€'★g)作(zuò)是(shì)告訴計(jì)算(suànφφ☆)機(jī)如(rú)何去(qù)做(zuò)。

  真實情況

  真實情況是(shì),計(jì)算(suàn)機(jī)能(nén≥ δg)正确的(de)按照(zhào)命令去(qù)運行(xíng)。無Ωπ‌論你(nǐ)寫的(de)是(shì)“HelloWo‌÷£rld”,計(jì)算(suàn)機(jī)都(dōu)能(♠β™néng)精确的(de)按照(zhào)你(nǐ)的(de)命令去≥±"¶(qù)做(zuò)。

  可(kě)我們的(de)工(gōng)作(zuò),我們的(de)∑>真正工(gōng)作(zuò)是(shì):告訴程序員(φ¶ 'yuán)和(hé)我們自(zì)己:我們讓計(jì)算(su☆™àn)機(jī)做(zuò)什(shén)麽了(le)。現(xiàn★♥♦)代的(de)軟件(jiàn)編程思想就(jiù)是(shì)結構化(♦π±huà)的(de)、清楚的(de)描述計(jì)算(suàn)機(jī)将要 >(yào)執行(xíng)的(de)任務。©¶

  事(shì)實上(shàng),計(jì)算(suàn)α≥機(jī)并不(bù)去(qù)閱讀(dú)你( ←nǐ)在程序裡(lǐ)寫了(le)什(shén)麽,而人(™γrén)會(huì)。計(jì)算(suàn)機(jī)把程序員(yuánπ&♠ )寫的(de)代碼編譯成字節比特,真正會(huì)去(qù)看('₹♥kàn)你(nǐ)寫的(de)是(shì)什(shén)麽的(de)隻有§§ (yǒu)人(rén)類。

  寫軟件(jiàn)要(yào)像講故事(shì)

  如(rú)果你(nǐ)對(duì)你♦₽(nǐ)的(de)工(gōng)作(zuò)和(hé)你(₽•‌nǐ)寫的(de)代碼的(de)行(xíng)為(wèi)有(yǒ₹$®✔u)了(le)新的(de)認識,你(nǐ)<₩ 會(huì)馬上(shàng)很(hěn)清₩→' 楚的(de)發現(xiàn),編程工(gōng)作(z<©®&uò)更像講故事(shì)。

  想一(yī)想。你(nǐ)是(shì)如(rú)何知(zhī★γ)道(dào)一(yī)個(gè)人(rén)講故事(s ∏εhì)沒人(rén)愛(ài)聽(tīng)的(de)?這(zhè)很(hěβ↕'Ωn)簡單,他(tā)老(lǎo)跑題,他(tā)老(lǎo)是(shì)糾結∑™π在不(bù)重要(yào)的(de)細節上(shàng σ£€),他(tā)老(lǎo)是(shì)在故事(sh≥§ì)場(chǎng)景中挑來(lái)跳(tiàγ€→o)去(qù),等等。你(nǐ)立刻能(néng)知(zhī)道(dào)€™∏ 故事(shì)被他(tā)講爛了(le)。

  雖然在最後你(nǐ)能(néng)明(míng±✘₹™)白(bái)故事(shì)裡(lǐ)發生(shēng)了∏≤♦ (le)什(shén)麽,你(nǐ)甚至能(néng)複述它,但(''dàn)你(nǐ)會(huì)喜歡這(zhè)樣的(d¶♠e)故事(shì)嗎(ma)?你(nǐ)γ₩♦會(huì)有(yǒu)興趣轉述給别人(rén)或豐富&♦®故事(shì)內(nèi)容嗎(ma)?

  相(xiàng)同的(de)事(shì)情也(yě)發δ¥​生(shēng)在軟件(jiàn)開(kāi)發中。如♠§δ(rú)果你(nǐ)的(de)代碼寫的(de)含糊不(bù)清↕∑≤,亂七八糟,沒有(yǒu)人(rén)會(huì)願意欣賞它。沒ε✔♣有(yǒu)人(rén)會(huì)願意​∑α看(kàn)它第二次。并且你(nǐ)是(shì★<)第一(yī)個(gè)受它折磨的(de)人(rén)。

  訣竅

  那(nà)麽,現(xiàn)在你(nǐ)想要(yào)知(zhī)道(d'÷→ào)這(zhè)個(gè)簡單的(de)秘訣,不(bù)是(shì)嗎(mπα✘a)?下(xià)面就(jiù)是(shì)

  代碼裡(lǐ)的(de)幹擾因素越×"少(shǎo)越好(hǎo)

  注意,我不(bù)是(shì)在討(tǎo)論明(míng)晰的(γφ de)代碼vs隐晦的(de)代碼,不(bù)±®是(shì)在討(tǎo)論約定優先,不(bù)是(↓'shì)在討(tǎo)論元數(shù)據編程有(yǒu☆÷​)害或其它類似的(de)東(dōng)西(xī)。

  寫出好(hǎo)的(de)軟件(ji®★↕àn)的(de)訣竅是(shì)代碼裡(lǐ)隻寫那(nà)些(xiē)能(n•'φ₩éng)讓你(nǐ)的(de)代碼講出的(↑™de)故事(shì)更有(yǒu)意義的(de)‍σ​內(nèi)容。如(rú)果它能(néng)讓你(nǐ)的(de)代碼更清↑¥楚,那(nà)就(jiù)這(zhè)樣寫它。如(♦γ¥$rú)果這(zhè)個(gè)東(dōng)西(☆π♣xī)對(duì)故事(shì)沒有(yǒu)任何意義,∑>✘​那(nà)就(jiù)扔了(le)它。扔了(le)它能(néng)讓故事(s←βhì)更好(hǎo)。如(rú)果代碼耦合模塊不(<♠bù)清,就(jiù)用(yòng)元數(s↓↓hù)據編程和(hé)約定。

  例子(zǐ)

  有(yǒu)一(yī)些(xiē)經典的(de)例子(zǐ)可(δ→♠♥kě)以證明(míng)這(zhè)一(yī)點δ∏φ¶。比如(rú),描述一(yī)篇帖子(zǐ)和(hα≠Ω é)它的(de)作(zuò)者的(de)關系。

  1 classPost<>

  2 belongs_to:author,class_name:'Use>↑r',foreign_key::auth♥λ ored_by

  3 end

  看(kàn)見(jiàn)了(le)沒?所有(yǒu)關于類名,外(w< ×♣ài)鍵的(de)信息都(dōu)是(shì)幹擾。去(qù)掉它們。

  1 classPost<>

  2 belongs_to:user

  3 end

  第二版中沒有(yǒu)好(hǎo)聽&✔(tīng)的(de)“作(zu£ ↔‌ò)者”字眼,但(dàn)卻是(shì)更優♦Ω≥♠的(de),因為(wèi)它直奔主題,用(y‍♦×òng)最簡短(duǎn)的(de)語句告訴所有(yǒu)你(n♦♠ ǐ)想知(zhī)道(dào)的(de)。

  另外(wài)一(yī)個(gè)例子(zǐ),說(≥★shuō)一(yī)個(gè)類需要(yào♦Ω)關聯那(nà)些(xiē)創建/修改它的(de)信息的(de)用(yòngδ☆)戶

  01 classSetting<>

  02 belongs_to:creator

  03 belongs_to:editor

  04 

  05 attr_accessor:edi♠¶ting_user

  06 

  07 before_create:set_creator

  08 before_update:set_ed☆∑±δitor

  09 

  10 private

  11 

  12 defset_creator

  13 self.creator=@₩‌editing_user

  14 end

  15 

  16 defset_editor

  17 self.editor=@editing_user

  18 end

  19 

  20 end

  幹擾,所有(yǒu)的(de)這(zhè)些(x®απδiē)回調和(hé)attr_acessors都(dσβōu)是(shì)幹擾,都(dōu)是(shì)垃圾信息,沒有(y‌©±ǒu)任何價值體(tǐ)現(xiàn)在你(nǐ)想完成&σ的(de)任務中。更簡潔更好(hǎo)的(γ≤₩de)方法是(shì)下(xià)面這(zhè)樣寫:

  01 classSetting<>

  02 belongs_to:creator

  03 belongs_to:editor

  04 

  05 defediting_user÷↓±=(user)

  06 ifnew_record?

  07 self.creator=user

  08 else

  09 self.editor=user

  10 end

  11 end

  12 end

  你(nǐ)可(kě)以看(kàn)到×φ(dào)它精煉的(de)告訴了(le)我們發生(shēng)了(le)什(s∑∏×hén)麽。這(zhè)段代碼說(shuō),這(zhè)個(gè)類有(y↑>↓ǒu)一(yī)個(gè)記錄創建者,一(yī)個(g ☆‌£è)編輯者,我們用(yòng)editing_user賦給它們值。沒有(yǒ™ ☆✔u)回調幹擾。沒有(yǒu)幾個(gè)private方法的(®®π→de)無用(yòng)信息。

  一(yī)個(gè)更經典的(de)例子(zǐ)。在controlle ♠↓★r裡(lǐ)管理(lǐ)數(shù)據

  01 classPostsController<>

  02 defcreate

  03 ifparams[:post][:text].pre☆&₹✘sent?

  04 ifparams[:post][:text]=~/‍★ ÷fuck|cock|shit/

  05 flash[:error]="Be★™nice"

  06 @achtung=true

  07 end

  08 end

  09 

  10 if!@achtung

  11 @post=Post.new(p♥¶arams[:post])

  12 

  13 if@post.save

  14 flash[:success]="Yooho₹¶×‌o!"

  15 redirect_to:index

  16 else

  17 render:new

  18 end

  19 else

  20 redirect_to:index

  21 end

  22 end

  23 end

  所有(yǒu)的(de)這(zhè)些(xiē)βγ條件(jiàn)邏輯跟你(nǐ)的(de)controller實際上(∑©‍∏shàng)沒有(yǒu)任何關系。所有​★®π(yǒu)的(de)這(zhè)些(xiē)邏輯× 判斷并不(bù)屬于controller層α♠負責。當然,你(nǐ)可(kě)以這(zhè)樣做(zuò),而其能(néng₩‌♣)正常的(de)運行(xíng),但(d φ↑àn)這(zhè)不(bù)是(shì)好(hǎo)的(de)軟'Ω件(jiàn)。

  試試這(zhè)樣寫

  01 classPostsController<>

  02 defcreate

  03 @post=Post.new(params[:post])

  04 

  05 if@post.save

  06 flash[:successδ₽]="Yoohoo!"

  07 redirect_to:ind​®ex

  08 else

  09 render:new

  10 end

  11 end

  12 end

  13 

  14 classPost<>

  15 validate:bad_lan&πguage_check

  16 

  17 private

  18 

  19 defbad_language_check

  20 iftext=~/fuck|shit|coεδck/

  21 errors.add(:text,"h↓♣₽↓assomeprettybadlanguage")

  22 end

  23 end

  24 end

  現(xiàn)在你(nǐ)的(de)controller能(néng) ₹↕‌清楚的(de)說(shuō)明(míng)白$§(bái)發生(shēng)了(le)什(s✔≠<hén)麽。你(nǐ)可(kě)以清楚的(de)看(kàn)明₹♦↓(míng)白(bái)當記錄可(kě)以創建和¥∏♥(hé)不(bù)能(néng)創建時(shí)會(huì)發λγ生(shēng)什(shén)麽。跟Post類一(yī)樣,你(nǐ★ ↕)可(kě)以清楚的(de)理(lǐ)解它在過濾那(nà)些(xiē)不(₩☆bù)幹淨的(de)文(wén)字。而且校(xiào‍♠÷)驗器(qì)有(yǒu)自(zì)己單獨的(de)地(dì)方←♣¶。它的(de)實現(xiàn)方式不(bù)會(huì)影(yǐng)響Po•≈ €st本身(shēn)。

    歡迎大(dà)家(jiā)閱讀(dú)浏覽,部分(fēn)↓₩™內(nèi)容來(lái)源于網絡,如(rú)£←δ有(yǒu)侵權,請(qǐng)聯系我們删除!

+ 查看(kàn)更多(duō)我們的(de)客戶 / Our client

    24小(xiǎo)時(shí)技(jì)術(sh←¥✔→ù)支持
    18931045623
    在線客服

首創簡介

    首創網絡成立于2012年(nián),是(shì)一(yī)家(ε↕jiā)專業(yè)的(de)品牌網站(zhàn)設計(jì)和(hé)網絡營'¶銷推廣公司,服務領域涵蓋網站(zhàn)設計(jì)、市(s §₽‍hì)場(chǎng)策劃、企業(yè)畫(h →​®uà)冊及VI視(shì)覺設計(jì)、網站(zhàn)域名空("★λkōng)間(jiān)等領域,公司擁有(yǒu)一§♦β≠(yī)批高(gāo)素質人(rén)才,著(zhe®‍ ★)力打造品牌網站(zhàn)設計(jì)' 制(zhì)作(zuò)和(hé)網上(shàγ&&ng)營銷策略執行(xíng)兩大(dà)優勢。

    十年(nián)來(lái),憑借對(du£←♦♥ì)市(shì)場(chǎng)趨勢敏銳'>的(de)洞察,和(hé)對(duì)消費(fèi)者、企業(yè)形态深↓∑♠•刻的(de)理(lǐ)解,我們服務的(de)已遍及京津冀、長(cháng✘¥)三角、珠三角等領域,行(xíng)業(yè)覆蓋政☆★府機(jī)構、企事(shì)業(yè)單位、•✘無線通(tōng)訊、環保、電(diàn)子(zǐ)、醫($✘yī)藥、交通(tōng)、園林(lín)、地(dì)産等行(xíng↑£↑)業(yè),諸多(duō)知(zhī)名企£δε業(yè),如(rú)廣州京信集團、廣東(dōn>™g)聯通(tōng)廣州分(fēn)公司、搜狐家(jiā)居廣州站‌&α(zhàn)、搜狐家(jiā)居邯鄲站(zhàn)等,都(↓∑dōu)鑒證了(le)首創設計(jì)公司÷±↔π的(de)品牌設計(jì)思想與能(néng)<β♥®力,首創設計(jì)公司也(yě)與諸多(du∑≥βεō)企業(yè)勃的(de)市(shì)場(chǎng)經濟≥λβ中互促共生(shēng)。

在線客服


  • 掃描加微(wēi)信

  • 掃描加QQ

  • 掃描浏覽手機(jī)版
首創網絡邯鄲公司
邯鄲公司
服務熱(rè)線:0310-4559740 / 18931045623✘∑  公司地(dì)址:邯鄲市(shì)叢台區(qū)頤高(g↔σāo)廣場(chǎng)B座13層1304室  客戶接待:邯鄲♠•≠市(shì)陵園路(lù)669号康橋國(÷∑guó)際B06