來聊聊Node.js 的哲學思想

weixin_34290000發表於2018-06-13
4479768-1b6a70d79246ef32

每個平臺都有它自己的哲學:大眾普遍接受的一套原理和準則,影響平臺演化的一種做事思想,以及應用程式該如何開發與設計。這些原則中的有些原則源於技術本身,有些是被它的生態系統啟用了,有些是社群中的種種趨勢,以及一些其他的不同的意識形態的演變。在Node.js 中,一些基本原則直接來自於它的創造者——Ryan Dahl 和其他為核心庫做出過貢獻的人,有些來自於社群中的魅力人物,還有些則是從JavaScript 中繼承而來或受到UNIX 哲學的影響。

這些原則都不是強加的,它們總是遵循常識的。不管怎樣,當我們在設計程式的過程中需要靈感來源的時候,它們被證明是非常有用的。

小核心

Node.js 自身核心庫建立在幾個原則的基礎上。其中之一是具有功能的最小集合,其餘的留給所謂的使用者平臺(或使用者空間),模組的生態系統存在於核心庫之外。這一原則對Node.js文化有巨大的影響,因為它給社群提供了自由,我們在使用者模組範圍內,使用廣泛的解決方案來試驗和快速迭代,而不是受制於建立在嚴格控制和穩定核心庫基礎上緩慢發展的解決方案。保持核心功能的最小集合,不僅利於可維護性,而且對於整個生態系統的進化也有積極的文化影響。

小模組

Node.js 使用模組的概念作為構建程式程式碼結構的基本方式。它是一個構建塊,用於建立應用程式和複用庫,複用庫又叫包(一個包也經常被稱為一個模組,通常情況下,它有一個單一的模組作為入口點)。在Node.js 中,一個最重要的原則是設計小模組,這不僅指程式碼的大小,更是指範圍的大小。

這一原則源於UNIX 哲學,特別是它的兩個準則,如下:

○  “小即是美”

○  “讓一個程式做好一件事”

Node.js 把這些概念提升到了一個新的高度。在NPM(官方的軟體包管理器)的幫助下,Node.js 可以幫助解決依賴地獄問題,其通過確保每一個安裝包有自己單獨的一套依賴集合,從而使程式依賴很多包而不產生衝突。事實上,這種Node 方式需要極高水平的可複用性,即應用程式由大量小而好的集中的依賴關係組成。雖然這在其他平臺被認為是不切實際的,甚至是完全不可行的,但在Node.js 中這種做法是被鼓勵的。結果就是,經常可見到NPM 包只有不到100 行程式碼或僅暴露出一個單獨的方法。

除了在可複用性方面的明顯優勢,小模組也可以被認為:

○  容易理解和使用

○  測試和維護簡單

○  完美與瀏覽器共享

把更小和更集中的模組,甚至最小的程式碼塊,授權給所有人來分享或複用,這是把Don’tRepeat Yourself (DRY) 原則發揮到了一個新的水平。

小接觸面

除了體積和範圍小,Node.js 模組通常也具有隻暴露出最小的一組功能的特性。這樣做的主要優點是增加了API 的可用性,意味著API 的使用變得更清晰,較少暴露出錯誤的使用。大多數時候,一個元件的使用者感興趣的其實只是一組非常有限和集中的功能,而不需要擴充套件功能或挖掘到更深的層次。

在Node.js 中,定義模組一種非常普遍的模式是隻輸出一個功能,比如一個方法或者一個建構函式,而讓擴充部分或次要特性成為輸出方法或建構函式的屬性。這有助於使用者識別什麼是重要的,什麼是次要的。在Node.js 中,不難找到只輸出一個功能的模組,毫無疑問,它提供了一個單一的、無比清晰的切入點。

許多Node.js 模組都有這樣一個特點,即建立它們是為了直接使用而不是擴充套件。通過禁止任何擴充套件的可能性來鎖定一個模組的內部結構,這可能聽起來很不靈活,但卻具有減少用例、簡化實現、維護簡單及提高可用性的優勢。

簡單和實用

你是否聽說過Keep It Simple, Stupid (KISS) 原則或者以下名言:

Simplicity is the ultimate sophistication(簡單是複雜的最高境界)。

——達芬奇

著名電腦科學家Richard P.Gabriel,創造了術語“更糟的也是更好的”來描述模組。由此,更少和更簡單的功能是一個很好的軟體設計選擇。在他的文章The Rise of “Worse is Better” 中講到:

設計必須是簡單的,無論是實現還是介面。更重要的是實現要比介面更簡單。

簡單是設計中最重要的考慮因素。

設計簡單而非完美的、功能齊全的軟體,是一個很好的實踐。有幾個原因:實現更簡單;允許用較少的資源進行更快的傳輸;更容易適應、維護和理解。由於這些因素而培育出了一些社群成果,同時這也促進軟體本身的發展和改進。

在Node.js 中,強大的JavaScript 也支援該原則。事實上該原則並不罕見,我們可以看到簡單的函式、閉包和物件正在取代複雜的類層次結構。純物件導向的設計往往試圖使用計算機系統的數學術語複製現實世界,不考慮缺陷和現實世界本身的複雜性。然而事實是,軟體總是和現實相似,我們先努力去做一些帶有合理複雜性但能很快起作用的工作,這樣可能會獲得更多的成功;而不是想著創造近乎完美的軟體,付出巨大的努力和使用大量的程式碼去維護。

4479768-908f7816b4583e2d



《node.js設計模式(第2版)》一書中,我們將多次看到這個原則。我們將看到一個簡單、實用的方法(大部分時間)為什麼勝過一個純粹的、完美的設計。

4479768-aa0dafb6d89601f5

本書通過大量示例形象地闡述了 Node.js 的哲學思想和設計模式。內容主要由六部分組成:Node 核心思想、基礎設計模式、非同步控制流模式、流程式設計、Node.js 的傳統設計模式和特有設計模式、通用程式設計的 Web 應用以及處理複雜實際問題的高階程式設計技巧。

這是一本值得深入品讀的書籍,讀者若具備一些軟體設計的理論知識會有助於理解書中提出的概念,中級 Node.js 開發者也會從本書有所收穫。

瞭解本書詳情:京東噹噹亞馬遜

相關文章