來聊聊Node.js 的哲學思想

來聊聊Node.js 的哲學思想

每個平臺都有它自己的哲學:大眾普遍接受的一套原理和準則,影響平臺演化的一種做事思想,以及應用程序該如何開發與設計。這些原則中的有些原則源於技術本身,有些是被它的生態系統激活了,有些是社區中的種種趨勢,以及一些其他的不同的意識形態的演變。在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 也支持該原則。事實上該原則並不罕見,我們可以看到簡單的函數、閉包和對象正在取代複雜的類層次結構。純面向對象的設計往往試圖使用計算機系統的數學術語複製現實世界,不考慮缺陷和現實世界本身的複雜性。然而事實是,軟件總是和現實相似,我們先努力去做一些帶有合理複雜性但能很快起作用的工作,這樣可能會獲得更多的成功;而不是想著創造近乎完美的軟件,付出巨大的努力和使用大量的代碼去維護。

來聊聊Node.js 的哲學思想


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

來聊聊Node.js 的哲學思想

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

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

瞭解本書詳情:https://item.jd.com/12316910.html


分享到:


相關文章: