摘要:模式并不就是一個(gè)具體的解決方案。我們要記住模式的角色僅僅就是給我們提供一個(gè)解決方案體系。使用本地瀏覽器的方法比如來選擇所有為的元素。后者毫無競(jìng)爭力。在本書的后面我們將繼續(xù)討論更多的設(shè)計(jì)模式。
原書鏈接Learning JavaScript Design Patterns
水平有限很多地方不通順,錯(cuò)翻漏翻歡迎交流。
模式是一種可普遍應(yīng)用于軟件設(shè)計(jì)——對(duì)我們前端人員來講就是JavaScript網(wǎng)絡(luò)應(yīng)用程序的可重用方案?;蛘哒f是一種可用于解決很多不同情況的模板。
所以理解模式對(duì)我們來說究竟有什么好處呢?設(shè)計(jì)模式主要有三點(diǎn)優(yōu)勢(shì):
模式是成熟的解決方案: 它使用成熟的技術(shù)為軟件開發(fā)中問題提供了可靠的方法,這些技術(shù)反映了為模式定義的開發(fā)的經(jīng)驗(yàn)和見解。
模式易于重用: 模式通常反映了一個(gè)很好的可適應(yīng)我們本身需求的方法。這個(gè)特征使得它魯棒性很好。
模式有很好的表現(xiàn)力: 模式通常都有一個(gè)解決方案的關(guān)鍵詞用法和語法結(jié)構(gòu),通過它我們可以讓大型的解決方案表現(xiàn)得更優(yōu)雅。
模式并不就是一個(gè)具體的解決方案。我們要記住模式的角色僅僅就是給我們提供一個(gè)解決方案體系。模式并不能解決所有的設(shè)計(jì)問題,也不能取代一個(gè)好的設(shè)計(jì)師,但它確實(shí)能成為設(shè)計(jì)師的好幫手。接下來我們來討論一下模式的其他一些優(yōu)勢(shì)。
模式可以防患于未然: 當(dāng)我們的代碼是建立在成熟的模式上時(shí),我們可以花更少的時(shí)間考慮我們的代碼結(jié)構(gòu),而把更多的時(shí)間放在我們的總的解決方案的質(zhì)量上。這是由于模式總是鼓勵(lì)我們以結(jié)構(gòu)化和組織化的方式來編寫代碼,很好地避免了一些未來重構(gòu)代碼的需求。
模式可以提供文檔化的通用解決方案,不會(huì)被某個(gè)多帶帶問題所限制: 這種通用化的方式意味著我們不需要被應(yīng)用(通常是編程語言的不同)所限制,設(shè)計(jì)模式仍然可以改善我們代碼的結(jié)構(gòu)。
特定的模式確實(shí)可以避免重復(fù)來減少代碼量: 通過鼓勵(lì)開發(fā)者在容易減少代碼重復(fù)區(qū)域更加警惕(比如用一個(gè)通用函數(shù)來取代減少執(zhí)行函數(shù))。這也就是我們所說的讓代碼更加"DRY"。
模式添加到開發(fā)者的字典中可以讓他們交流更加方便
頻繁被使用的模式可以隨著開發(fā)者在社區(qū)中交流得到改善: 在某些情況這可以引領(lǐng)一種全新的設(shè)計(jì)模式,并讓它更好地適應(yīng)更多的具體情況。這可以保持基于模式的解決方案保持健壯性,甚至超過點(diǎn)對(duì)點(diǎn)的解決方案。
我們已經(jīng)天天在用模式了為了理解模式究竟多吊,我們來回顧一個(gè)jQuery已經(jīng)幫我們解決的元素選擇的問題。
假設(shè)我們有個(gè)script,在DOM中為每個(gè)找到的class為"foo"的元素添加一個(gè)計(jì)數(shù)器。效率最高的查詢方法是什么?來看看下面幾種解決方案:
選擇頁面中的所有DOM元素并存儲(chǔ)他們的引用,然后通過正則表達(dá)式(或者其他的方法)來過濾只存儲(chǔ)那些class為"foo"的元素。
使用本地瀏覽器的方法比如querySelectorAll()來選擇所有class為"foo"的元素。
使用原生方法比如getElementsByClassName()來類似地選擇所需集合。
所以這仨哪個(gè)快呢?事實(shí)上是<3>,它是其他倆的8-10倍。但是天不遂人愿,<3>在IE9以下是沒用的,一次在<2>和<3>都不支持的環(huán)境下只能使用<1>了。
然而使用jQuery的開發(fā)者就不用愁了,因?yàn)樗鼮槲覀冞@些使用外觀模式的把選擇器抽象出來了。我們后面會(huì)提到,這種模式為以后一些潛在的負(fù)載代碼提供了一些抽象接口(比如$el.css(), $el.animate())。這意味這我們不需要花太多的時(shí)間在實(shí)現(xiàn)細(xì)節(jié)上了。
jQuery還自動(dòng)地根據(jù)我們的瀏覽器來挑選選擇器方法。
我們可能都熟悉jQuery的$("selector"),同樣是選擇HTML元素,它比起getElementById(), getElementsByClassName(), getElementByTagName()等方法來說方便多了。
我們知道querySelectorAll()也試圖做同樣的事,比較一下使用jQuery的模式VS我們自己來選擇。后者毫無競(jìng)爭力(?)。抽象使用模式有現(xiàn)實(shí)價(jià)值。
在本書的后面我們將繼續(xù)討論更多的設(shè)計(jì)模式。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79399.html
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:學(xué)習(xí)模式設(shè)計(jì)的過程中,我們遇到原生模式這玩意兒也不是啥大驚小怪的事。最好的設(shè)計(jì)模式通常不直接給出問題的答案,這被人認(rèn)為是解決困難問題的必要步驟。 原書鏈接Learning JavaScript Design Patterns水平有限很多地方不通順,錯(cuò)翻漏翻歡迎交流。 模式測(cè)試,原生模式&約法三章 記住并不是所有的算法啊,最佳實(shí)踐啊,解決方案啊什么的都可以被稱為一個(gè)完整的模式的。很可能它...
閱讀 2953·2021-09-26 10:18
閱讀 5281·2021-09-22 15:02
閱讀 2796·2019-08-30 15:53
閱讀 1841·2019-08-29 18:41
閱讀 2692·2019-08-27 10:58
閱讀 2623·2019-08-26 13:49
閱讀 2750·2019-08-26 12:17
閱讀 901·2019-08-26 11:49