來聊聊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設計模式(第2版)》一書中,我們將多次看到這個原則。我們將看到一個簡單、實用的方法(大部分時間)為什麼勝過一個純粹的、完美的設計。
本書通過大量示例形象地闡述了 Node.js 的哲學思想和設計模式。內容主要由六部分組成:Node 核心思想、基礎設計模式、非同步控制流模式、流程式設計、Node.js 的傳統設計模式和特有設計模式、通用程式設計的 Web 應用以及處理複雜實際問題的高階程式設計技巧。
這是一本值得深入品讀的書籍,讀者若具備一些軟體設計的理論知識會有助於理解書中提出的概念,中級 Node.js 開發者也會從本書有所收穫。
相關文章
- 聊聊微服務架構思想微服務架構
- 聊聊微服務治理體系思想微服務
- 來聊聊原始碼學習原始碼
- 《生活的哲學》
- Go 設計哲學:少即是多,哪裡來的?Go
- 丁磊的“阿甘哲學”
- 聊聊領域驅動設計與編碼思想
- 哲學筆記筆記
- 陶哲軒:好的數學
- DND體系的哲學思考
- 任天堂的產品哲學
- 程式設計師的哲學程式設計師
- 埃森哲:工作的未來報告
- 電腦科學哲學(史丹佛大學哲學百科全書)
- 我的 Windows 檔案管理哲學Windows
- 「 思考 」 React Hooks 的設計哲學ReactHook
- 埃森哲:未來系統
- 哲學筆記——老子筆記
- 原來雲資料庫也是有思想的…資料庫
- 用介面的思想來理解GraphQL
- 我們來聊聊命名
- 來聊聊 應用層
- 也來聊聊 HTTPS.HTTP
- 來吧,聊聊API安全API
- 深入出來的Node.js操作MySQLNode.jsMySql
- 埃森哲報告:資產管理的未來
- 演算法研究中的哲學原理演算法
- 好的軟體哲學家有哪些? - Hillel
- 埃森哲報告:未來之家
- 從文學到遊戲 聊聊反烏托邦作品帶來的思考遊戲
- Node.JS 學習 來自課程進擊Node.js基礎(一)第5-10Node.js
- 學習配置優先思想
- 王陽明-心學思想
- 聊聊李開復的 AI 未來觀AI
- 聊聊機器學習的套路機器學習
- 聊聊我的 Java 自學之路Java
- 聊聊我學linux的歷程Linux
- Unix哲學17條原則的新感悟