把每個編程語言當作是一個集合,從語言設計到編程格式,它們一定是含有交集的。為了解決因“交集”而帶來的代碼編程錯誤,本文詳細分析了HTML、CSS、JavaScript、Server-side Languages和SQL之間所存在怎樣的界限。
如今開發(fā)者有很多種途徑去解決編程問題,不管是利用大量的類庫還是各種各樣的技術工具。當然了,隨便選擇一些錯誤的工具導致的代碼錯誤也是工作里最頭疼的事情。另外總結出,不了解工具與工具之間、語言與語言之間的界限所帶來的風險和選錯工具帶來的風險是一樣的。下面這幾個常用的構建Web App的工具,每一個都有特定的使用目的。
HTML:為編寫的內容提供語義標記。
CSS:將設計風格從標記里區(qū)分出來。
JavaScript:提供表現(xiàn)行為。
Server-side Languages:管理商業(yè)邏輯。
SQL:對RDBMS數(shù)據(jù)存取和數(shù)據(jù)操作有很大的幫助。
下面就來分析一下不同的技術之間存在哪些界限和互動點,以及它們是怎樣給開發(fā)者在工作當中制造麻煩的。
HTML和JavaScript之間的界限
盡量避免將HTML放入JavaScript字符串里,不然出現(xiàn)的結果可能會像這樣:
值得注意的是,如何在for循環(huán)語句下面生成一個HTML行,然后設置成一個稱之為carRow的變量。將HTML放入JavaScript字符串里,這樣就能更靈活的將HTLM插入在網(wǎng)頁上,但應該標記為本地 HTML。當選擇一個模板解決方案的時候,需要尋找一個簡單的、較舊的HTML作為模板來源。KnockoutJS和AngularJS模板都是使用這一方法的。
如果你想把HTML儲存在.js文件里的話,必須三思而后行,因為JavaScript是典型的用來儲存標記的錯誤工具——也就是說,保持本土化沒什么意義可言了(代碼顏色、語法檢查等等)。
另一方面,避免將復雜的JavaScript放在HTML里的DOM基礎上:
有的人直接把JavaScript放在HTML里面,但是這種通過直接插入行為到標記里的方法使得問題變得更為混淆,同時還消除了緩存和重復使用的機會。
這種低調的JavaScript行為的確降低了上述的問題出現(xiàn)幾率,但是新的框架像Knockout和Angular是可以將JavaScript推到HTML標記里的。不過在HTML里簡單聲明一下標記還是有好處的,因為當綁定比較簡單的時候標記很容易被發(fā)現(xiàn),并具有可讀性。但要小心,涉及到很多簡單聲明綁定的時候,JavaScript屬于.js文件,HTML屬于.html文件。
HTML和SQL之間的界限
這里有兩個簡單的案例:忽略了數(shù)據(jù)和HTML之間的重要界限所導致的現(xiàn)象。
關系型數(shù)據(jù)庫應該包含原始規(guī)范化數(shù)據(jù),這樣的數(shù)據(jù)也是多用途的。因此,存儲HTML在DB或注入HTML在查詢結果里,如上所示都是有問題的。它將整個演示和數(shù)據(jù)存儲在一起使得重復使用變得很困難。
內容管理系統(tǒng)是一個常見的問題,在這里用戶必須能夠存儲和管理在數(shù)據(jù)庫里的HTML。就相當于利用數(shù)據(jù)重復使用和數(shù)據(jù)規(guī)范化來換取最終用戶管理權。除此之外,應該最大限度的避免混合表示和混合數(shù)據(jù),因為它們會分離關注點,必須第一時間處理掉。
HTML和CSS之間的界限
HTML和CSS 之間的“過結”相對簡單,只要避免做這樣的事就行了:
人們經常將設計風格放入線上的HTML里,但是這樣會把語義標記和風格搞混淆。分離關注點的同時還消除了緩存和重復使用CSS的機會。DRY原理在這里比較適用:如果你想把一個風格使用在多個點上,那就需要事先聲明這個風格是在一個單獨的樣式表里的。
SQL和Server-side Language之間的界限
利用一個服務器端語言來創(chuàng)建高層次的動態(tài)SQL是很容易的,就像使用C#字符串生成SQL語句一樣簡單,但是存儲的程序和ORM通常會提供一個更安全、更優(yōu)雅的方法來生成動態(tài)的SQL。編寫動態(tài)SQL字符串的同時也打開了通往“SQL資料隱碼攻擊漏洞”的大門,并且取消了DBA管理和提高查詢性能的機會。含有SQL字符串的App在運行時也存在很高的風險,尤其是當模式發(fā)生變化的時候。ORM向數(shù)據(jù)庫提供增強型的類型接口,可是當模式不能夠和現(xiàn)有的數(shù)據(jù)庫查詢同步的時候,這些數(shù)據(jù)庫就無法編譯了。
JavaScript和Server-side Language之間的界限
在服務器上編寫動態(tài)JavaScript字符串,會出現(xiàn)這樣的情況:
這是誤用工具所出現(xiàn)的最常見的現(xiàn)象:使用一個Server-side Language生成動態(tài)的JavaScript,大多數(shù)情況下JavaScript應該保留在.js文件里,從服務器里返還出來的JSON可以提供更多的活力。
所以在你很投入的寫出下一行代碼的時候,最好考慮一下你離這些編程語言的邊界是不是很近?或者說靠哪一邊更近?熱愛清潔代碼的程序員應該努力保持本地化:文件擴展名在技術方面應該是一個很好的指示器。
保持本地化
本地化的重要性不只是針對于JavaScript,當你發(fā)現(xiàn)在保持本地化的同時沒什么取舍可選的時候,你只能和字符串較勁了。不過這其中的底線是,避免通過字符串把一種編程語言編寫在另一種編程語言或者是格式里。不過目前在比較流行的編程語言里,解決這樣的問題首先要考慮到動態(tài)化,并利用類庫來生成這樣的編程格式。要想通過字符串創(chuàng)造這么多東西就需要程序員同時理解兩種語言之間的界限。所以,一旦你發(fā)現(xiàn)一個文件里有兩種編程語言的話,最好先考慮如何使用更好的、更特殊的方法去消除其中的一個編程語言。
河南億恩科技股份有限公司(mszdt.com)始創(chuàng)于2000年,專注服務器托管租用,是國家工信部認定的綜合電信服務運營商。億恩為近五十萬的用戶提供服務器托管、服務器租用、機柜租用、云服務器、網(wǎng)站建設、網(wǎng)站托管等網(wǎng)絡基礎服務,另有網(wǎng)總管、名片俠網(wǎng)絡推廣服務,使得客戶不斷的獲得更大的收益。
服務器/云主機 24小時售后服務電話:
0371-60135900
虛擬主機/智能建站 24小時售后服務電話:
0371-55621053
網(wǎng)絡版權侵權舉報電話:
0371-60135995
服務熱線:
0371-60135900