做(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)聯系我們删除!
- 上(shàng)一(yī)條:wamp集成環境基礎配置一(yī)覽
- 下(xià)一(yī)條:網頁前端2013年(nián)必須知(zhī)道(dào)的(de)≥>幾點事(shì)
服務項目
熱(rè)門(mén)信息
- 邯鄲網絡公司:模闆建站(zhàn)的(de)好(hǎo)處有(yǒu£←♣Ω)哪些(xiē)?
- 3642024-04-25

- 4.9日(rì)訊,企業(yè)網站(zhàn↓÷α)建設如(rú)何發揮網絡營銷功能(néng)?
- 4092024-04-09

- 邯鄲網絡公司:網站(zhàn)建設開(kāi)發有β¶✔(yǒu)哪些(xiē)細節需要(yào)注意?
- 5402024-03-07

- 邯鄲網絡公司:外(wài)貿網站(zhàn)制(zhì)✘±作(zuò)的(de)8個(gè)步驟
- 3772024-03-05

- 簡單3步,輕松做(zuò)企業(yè)官網
- 6822024-02-18
