面向?qū)ο?,更適合JavaScript
面向?qū)ο蟪绦蛟O(shè)計(jì)是軟件開發(fā)中一個(gè)很龐大很復(fù)雜的話題,它并不是僅僅學(xué)會(huì)類、繼承、封裝、多態(tài)這些面向?qū)ο缶幊陶Z(yǔ)法元素就表示掌握的,這些語(yǔ)法元素只是實(shí)現(xiàn)面向?qū)ο蟪绦虻墓ぞ撸?就像磚塊、水泥能搭建小屋,也能造高樓大廈,然而在這里重要的不是磚塊水泥,而是其它因素。所以,利用面向?qū)ο蠹夹g(shù)寫程序,語(yǔ)法元素不是關(guān)鍵,關(guān)鍵在于組織這些語(yǔ)法元素的方法和技巧。
這些方法和技巧,比如說(shuō)那威名遠(yuǎn)播的23個(gè)面向?qū)ο笤O(shè)計(jì)模式,各種面向?qū)ο笤O(shè)計(jì)原則,如面向接口編程、封裝變化、高內(nèi)聚、低耦合等等,都有很多相關(guān)書籍介紹。
眾所周知,使用面向?qū)ο蠹夹g(shù)的目的是為了寫好代碼,使代碼易讀、易維護(hù)、足夠靈活。
然而,使用Java、C#之類的血統(tǒng)純正的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言卻非常難以實(shí)踐面向?qū)ο蟮姆椒ㄅc技巧, 即使代碼中隨處可見類、封裝、繼承、多態(tài),代碼質(zhì)量還是非常差,有面向?qū)ο笾?,無(wú)面向?qū)ο笾畬?shí)。
這之中的原因在于,通常使用Java、C#語(yǔ)言寫的代碼邏輯非常簡(jiǎn)單,這兩門語(yǔ)言在web領(lǐng)域使用居多,而web領(lǐng)域的程序多數(shù)邏輯只是對(duì)數(shù)據(jù)庫(kù)的增刪查改,這些邏輯根本沒有面向?qū)ο蠹记纱箫@身手的余地,俗話說(shuō),實(shí)踐出真知,既然沒有辦法實(shí)踐,自然也沒有辦法很好的掌握, 試問一下,有誰(shuí)做個(gè)網(wǎng)站能用到復(fù)雜的設(shè)計(jì)模式的,如果真有,大多數(shù)情況下也是強(qiáng)行使用。 因此,如果想通過(guò)寫普通的Java網(wǎng)站,學(xué)好面向?qū)ο蠹夹g(shù),很難, 事倍功半。
然而, 在網(wǎng)站的另一端,面向?qū)ο蠹夹g(shù)卻能大顯神通,那就前端JavaScript領(lǐng)域。理論上講,JavaScript都不能算面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,它沒有真正的類,也沒有繼承,要實(shí)現(xiàn)這些特性必須通過(guò)另類的模擬。不過(guò)這并沒有問題,事實(shí)上面向?qū)ο蟮木璨⒉皇莄lass、extends這些關(guān)鍵字,而是使用這些關(guān)鍵字的方法,只要功力深厚,一草一木皆為武器;只要掌握方法,即使沒有這些關(guān)鍵字,通過(guò)模擬這些關(guān)鍵字也能寫出像樣的面向?qū)ο蟪绦颉?/span>
為什么面向?qū)ο笤O(shè)計(jì)應(yīng)用,在純正的面向?qū)ο笤O(shè)計(jì)語(yǔ)言中,還不如山寨的JavaScript? 這是因?yàn)榍岸薐avaScript程序的邏輯足夠復(fù)雜,當(dāng)然,我說(shuō)的JavaScript程序不是在網(wǎng)頁(yè)上彈出一個(gè)對(duì)話框、讓網(wǎng)頁(yè)中某張圖片在隱藏和顯示之間切換,我說(shuō)的JavaScript程序是指那些復(fù)雜的特效,一個(gè)獨(dú)立的特效代碼都在千行以上的那種,比如說(shuō)功能完善的日歷控件,支持拖拽節(jié)點(diǎn)以及動(dòng)態(tài)加載數(shù)據(jù)的導(dǎo)航樹形菜單、富文本編輯器、各種具有可玩性的JS小游戲等等, 這類特效都有大量的代碼,且邏輯復(fù)雜, 寫這些程序時(shí),如果只是簡(jiǎn)單粗暴的代碼堆砌, 那極有可能無(wú)法最終完成任務(wù),即使完成也毫無(wú)維護(hù)性可言,這種情況下就強(qiáng)烈需要面向?qū)ο筮@樣的技術(shù)來(lái)簡(jiǎn)化代碼的復(fù)雜性,這也是為什么面向?qū)ο蟪绦蛟O(shè)計(jì)技巧與方法在前端JavaScript能很好實(shí)踐的原因。
總而言之,如果你是一個(gè)后端程序員,想提高自己編寫高質(zhì)量代碼, 然而卻苦于沒辦法實(shí)踐書上所學(xué)的面向?qū)ο蠹夹g(shù),那么不妨去寫寫JavaScript, 當(dāng)你面對(duì)的不是數(shù)據(jù)庫(kù)的增刪查改,而是合理的組織巨量DOM元素,使之達(dá)到你想要的效果, 那么,面向?qū)ο蟛豢苫蛉保?你不用不行,而不是你想用卻沒有場(chǎng)景可以使用。使用JavaScript,會(huì)讓你更有寫程序的感覺,因?yàn)槟悴辉偈菙?shù)據(jù)的搬運(yùn)工。
知乎:https://www.zhihu.com/people/aspwebchh
github:https://github.com/aspwebchh
email: aspwebchh@gmail.com

浙公網(wǎng)安備 33010602011771號(hào)