編寫程式碼?先熟悉一下程式語言界限吧!

csdn發表於2013-10-10

  本文作者Cory House是一個軟體開發者,篤信清潔程式碼和務實開發。最近他總結了不同的程式語言之間存在的界限規則,他還認為不瞭解程式語言之間存在的界線無異於選擇錯誤的開發工具,要想簡化、加快軟體開發過程,瞭解語言之間的異同是必不可少的。(以下是編譯內容)

  如今開發者有很多種途徑去解決程式設計問題,不管是利用大量的類庫還是各種各樣的技術工具。當然了,隨便選擇一些錯誤的工具導致的程式碼錯誤也是工作裡最頭疼的事情。另外總結出,不瞭解工具與工具之間、語言與語言之間的界限所帶來的風險和選錯工具帶來的風險是一樣的。下面這幾個常用的構建Web App的工具,每一個都有特定的使用目的。

  • HTML:為編寫的內容提供語義標記。
  • CSS:將設計風格從標記裡區分出來。 
  • JavaScript:提供表現行為。
  • Server-side Languages:管理商業邏輯。
  • SQL:對RDBMS資料存取和資料操作有很大的幫助。

  下面就來分析一下不同的技術之間存在哪些界限和互動點,以及它們是怎樣給開發者在工作當中製造麻煩的。

  HTML和JavaScript之間的界限

  儘量避免將HTML放入JavaScript字串裡,不然出現的結果可能會像這樣:

編寫程式碼?先熟悉一下程式語言界限吧!

  值得注意的是,如何在for迴圈語句下面生成一個HTML行,然後設定成一個稱之為carRow的變數。將HTML放入JavaScript字串裡,這樣就能更靈活的將HTLM插入在網頁上,但應該標記為本地HTML。當選擇一個模板解決方案的時候,需要尋找一個簡單的、較舊的HTML作為模板來源。KnockoutJSAngularJS模板都是使用這一方法的。

  如果你想把HTML儲存在.js檔案裡的話,必須三思而後行,因為JavaScript是典型的用來儲存標記的錯誤工具——也就是說,保持本土化沒什麼意義可言了(程式碼顏色、語法檢查等等)。

  另一方面,避免將複雜的JavaScript放在HTML裡的DOM基礎上:

編寫程式碼?先熟悉一下程式語言界限吧!

  有的人直接把JavaScript放在HTML裡面,但是這種通過直接插入行為到標記裡的方法使得問題變得更為混淆,同時還消除了快取和重複使用的機會。

  這種低調的JavaScript行為的確降低了上述的問題出現機率,但是新的框架像Knockout和Angular是可以將JavaScript推到HTML標記裡的。不過在HTML裡簡單宣告一下標記還是有好處的,因為當繫結比較簡單的時候標記很容易被發現,並具有可讀性。但要小心,涉及到很多簡單宣告繫結的時候,JavaScript屬於.js檔案,HTML屬於.html檔案。

  HTML和SQL之間的界限

  這裡有兩個簡單的案例:忽略了資料和HTML之間的重要界限所導致的現象。

編寫程式碼?先熟悉一下程式語言界限吧!

  關係型資料庫應該包含原始規範化資料,這樣的資料也是多用途的。因此,儲存HTML在DB或注入HTML在查詢結果裡,如上所示都是有問題的。它將整個演示和資料儲存在一起使得重複使用變得很困難。

  內容管理系統是一個常見的問題,在這裡使用者必須能夠儲存和管理在資料庫裡的HTML。就相當於利用資料重複使用和資料規範化來換取終端使用者管理權。除此之外,應該最大限度的避免混合表示和混合資料,因為它們會分離關注點,必須第一時間處理掉。

  HTML和CSS之間的界限

  HTML和CSS 之間的“過結”相對簡單,只要避免做這樣的事就行了:

編寫程式碼?先熟悉一下程式語言界限吧!

  人們經常將設計風格放入線上的HTML裡,但是這樣會把語義標記和風格搞混淆。分離關注點的同時還消除了快取和重複使用CSS的機會。DRY原理在這裡比較適用:如果你想把一個風格使用在多個點上,那就需要事先宣告這個風格是在一個單獨的樣式表裡的。

  SQL和Server-side Language之間的界限

  利用一個伺服器端語言來建立高層次的動態SQL是很容易的,就像使用C#字串生成SQL語句一樣簡單,但是儲存的程式和ORM通常會提供一個更安全、更優雅的方法來生成動態的SQL。編寫動態SQL字串的同時也開啟了通往“SQL資料隱碼攻擊漏洞”的大門,並且取消了DBA管理和提高查詢效能的機會。含有SQL字串的App在執行時也存在很高的風險,尤其是當模式發生變化的時候。ORM向資料庫提供增強型的型別介面,可是當模式不能夠和現有的資料庫查詢同步的時候,這些資料庫就無法編譯了。

  JavaScript和Server-side Language之間的界限

  在伺服器上編寫動態JavaScript字串,會出現這樣的情況:

編寫程式碼?先熟悉一下程式語言界限吧!

  這是誤用工具所出現的最常見的現象:使用一個Server-side Language生成動態的JavaScript,大多數情況下JavaScript應該保留在.js檔案裡,從伺服器裡返還出來的JSON可以提供更多的活力。

  所以在你很投入的寫出下一行程式碼的時候,最好考慮一下你離這些程式語言的邊界是不是很近?或者說靠哪一邊更近?熱愛清潔程式碼的程式設計師應該努力保持本地化:副檔名在技術方面應該是一個很好的指示器。

  保持本地化

  本地化的重要性不只是針對於JavaScript,當你發現在保持本地化的同時沒什麼取捨可選的時候,你只能和字串較勁了。不過這其中的底線是,避免通過字串把一種程式語言編寫在另一種程式語言或者是格式裡。不過目前在比較流行的程式語言裡,解決這樣的問題首先要考慮到動態化,並利用類庫來生成這樣的程式設計格式。要想通過字串創造這麼多東西就需要程式設計師同時理解兩種語言之間的界限。所以,一旦你發現一個檔案裡有兩種程式語言的話,最好先考慮如何使用更好的、更特殊的方法去消除其中的一個程式語言。

  原文:BitNative

相關文章