編寫程式碼?先熟悉一下程式語言界限吧!
本文作者Cory House是一個軟體開發者,篤信清潔程式碼和務實開發。最近他總結了不同的程式語言之間存在的界限規則,他還認為不瞭解程式語言之間存在的界線無異於選擇錯誤的開發工具,要想簡化、加快軟體開發過程,瞭解語言之間的異同是必不可少的。(以下是編譯內容)
如今開發者有很多種途徑去解決程式設計問題,不管是利用大量的類庫還是各種各樣的技術工具。當然了,隨便選擇一些錯誤的工具導致的程式碼錯誤也是工作裡最頭疼的事情。另外總結出,不瞭解工具與工具之間、語言與語言之間的界限所帶來的風險和選錯工具帶來的風險是一樣的。下面這幾個常用的構建Web App的工具,每一個都有特定的使用目的。
- HTML:為編寫的內容提供語義標記。
- CSS:將設計風格從標記裡區分出來。
- JavaScript:提供表現行為。
- Server-side Languages:管理商業邏輯。
- SQL:對RDBMS資料存取和資料操作有很大的幫助。
下面就來分析一下不同的技術之間存在哪些界限和互動點,以及它們是怎樣給開發者在工作當中製造麻煩的。
HTML和JavaScript之間的界限
儘量避免將HTML放入JavaScript字串裡,不然出現的結果可能會像這樣:
值得注意的是,如何在for迴圈語句下面生成一個HTML行,然後設定成一個稱之為carRow的變數。將HTML放入JavaScript字串裡,這樣就能更靈活的將HTLM插入在網頁上,但應該標記為本地HTML。當選擇一個模板解決方案的時候,需要尋找一個簡單的、較舊的HTML作為模板來源。KnockoutJS和AngularJS模板都是使用這一方法的。
如果你想把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
相關文章
- 使用C語言編寫貪食蛇程式原始碼C語言原始碼
- 幽默:儘量用領域語言編寫程式碼
- Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- 用C語言編寫windows服務程式C語言Windows
- 編寫你人生中第一個機器學習程式碼吧!機器學習
- 手寫程式語言-如何為 GScript 編寫標準庫
- 寧願編寫程式碼?還是把事情都寫下來吧!
- 將GO編繹成JavaScript,用GO語言來寫前端程式碼GoJavaScript前端
- 程式碼的印象派:寫點好程式碼吧
- 用msys2編譯《自制程式語言》程式碼編譯
- 用“Whitespace”程式語言編寫無字天書
- 09. C語言內嵌彙編程式碼C語言
- 基礎入門: 編寫第一個 Go 語言程式Go
- 旺旺農場遊戲系統程式設計開發程式碼示例丨Solidity語言編寫遊戲程式設計Solid
- 網頁字元編碼、語言程式碼設定與SEO網頁字元
- 你們現在編寫程式碼是從先寫測試開始嗎?
- Python語言編寫/分投趣系統技術開發程式碼示例Python
- c語言if語句是如何變成彙編程式碼的?C語言
- C語言簡單程式碼程式C語言
- 現代程式語言用什麼語言寫成?
- 將你的 C 語言程式碼編譯成 .NET編譯
- 用 C 語言編寫多程式 Web 伺服器【粗暴版】Web伺服器
- C語言爬蟲程式編寫的爬取APP通用模板C語言爬蟲APP
- Python自然語言處理 4 編寫結構化程式Python自然語言處理
- 程式碼編寫提示配置
- 如何編寫MapReduce程式碼
- 寫點程式碼開心一下
- Sublime 編寫編譯 swift程式碼編譯Swift
- HTML語言編寫指南HTML
- 新編如果程式語言是女人
- 用 PHP 寫一個"程式語言"PHP
- 如果用程式語言來寫作文
- C語言getpriority()函式:取得程式程式執行優先權C語言函式
- 快速熟悉專案程式碼
- 面試官:來寫個程式碼求一下兩個數的最大公約數吧面試
- 用python語言寫程式有什麼好用的編輯器?Python
- 用C語言編寫Linux實用程式的藝術(轉)C語言Linux