用7段代碼來理解經常使用的寫做模式

對於開發者來講,「設計模式」這個概念確定不陌生,它是通過分類的、代碼設計經驗的總結,能將編寫代碼進行工程化,從而提高開發效率。 簡而言之,它就是「代碼模板」。html

設計模式 + 代碼邏輯 => 清晰高效的程序 「寫做模式」這個叫法也借鑑於此,是我針對一些熱門技術文章的寫做方式進行的總結,能幫咱們快速地構思出結構清晰的文章。 下面經過7篇熱門技術文章來總結7種寫做模式。前端

清單式

舉例

《2018年你須要知道的11個JavaScript庫》大綱:git

1. Lodash & Underscore
2. Ramda
3. MathJS
4. Moment & date-fns
5. Sugar
6. Lazy
7. CollectJS
8. ChanceJS
9. ChartJS
10. Polished
11. Mout
12. Voca
13. Licia
複製代碼

這裏列舉了13個GitHub上star數量較多的js庫,各個庫之間是並列的,相互之間並無直接聯繫,即便調換說明順序也不會對文章形成影響。程序員

模式

代碼

這種模式結構很是簡單,咱們能夠直接用數組的形式來描述它:github

[
  sectionA,
  sectionB,
  ...
  sectionX,
]
複製代碼

小結

把同一類(通常是並列關係)的知識/技能點匯聚起來,分條進行闡述。適用於有必定關聯關係,但邏輯性不強的碎片化的知識點。設計模式

對比式

舉例

《爲何Goroutine能有上百萬個,Java線程卻只能有上千個?》大綱:跨域

到底什麼是線程?

JVM線程使用固定大小的棧
Go線程使用動態大小的棧

JVM線程上下文切換成本高
Go線程切換成本低

結論
複製代碼

做者用JVM來指代Java語言,針對線程佔用內存空間以及CPU的使用率兩個方面,對JVM和Go進行了對比。數組

模式

代碼

這種模式能夠理解爲「清單式」的2.0版本,因此咱們用對象數組來描述它:bash

[
  // 文章主體
  {
    featureA: xxx,
    featureB: xxxx,
w
...
  }, 
  // 參照對象1
  {
    featureA: yyy,
    featureB: yyyy,
    ...
  }, 
  ...
]
複製代碼

小結

將兩三個相似的概念放在一塊兒討論,在一些特定的維度上將二者進行對比,最後總結出結論。前端工程師

疑問式

舉例

《爲何給你設置重重障礙?講一講Web開發中的跨域》大綱:

1、跨域是個什麼「問題」?
2、爲何不讓我跨域?
3、JSONP——最經常使用的繞過辦法
4、爲何JSONP能夠?
5、跨域資源共享(CORS)
6、不讓跨域請求?還能夠直接跨網頁
複製代碼

文章按照 what(什麼是跨域) -> why(爲何會跨域) -> how(怎麼解決跨域) 的思路來進行的寫做,具備必定的遞進關係。

模式

代碼

由於這種模式的出現已經有弱邏輯關係了(順序上有依賴,內容上無依賴),用串行的函數來描述它最適合不過了:

const sectionA = what();
const sectionB = why();
const sectionC = how();
複製代碼

小結

一般由多個相關聯的問題組合而成,邏輯關係層層推動,好比why(爲何)、what(是什麼)、how(怎麼樣)。

發散式

舉例

《普通程序員怎麼理解日誌系統》大綱:

1. Logging 系統的雛型
2. 何時打印日誌是個問題 —— Level
3. 打印日誌到哪裏是仍是一個問題 —— Appender
4. 日誌什麼樣也是個問題 —— Formatter
5. 高效地打印日誌是另一個問題 —— Efficient
6. 總結
複製代碼

圍繞日誌系統分條陳述,包括日誌級別、內容、存儲、內容、性能。

模式

代碼

能夠用JSON數據類型來描述這種結構

{
  sectionA: xxx,
  sectionB: yyy,
  sectionC: zzz,
  ...
}
複製代碼

小結

和清單式有些類似,但它是將一個具體的概念拆分紅多個部分,而後針對每一個部分進行闡述。

流程式

舉例

《如何Docker化任意一個應用?你須要參照這10步》大綱:

選擇基礎鏡像
安裝必要軟件包
添加自定義文件
定義容器運行時的用戶權限
定義暴露的端口
定義入口點(entrypoint)
定義一種配置方式
外部化數據
確保處理好日誌
輪轉日誌和其餘僅追加文件
複製代碼

做者按照操做流程編寫文章,具備強邏輯。

模式

代碼

咱們仍是用函數來描述邏輯。

const sectionA = step1();
const sectionB = step2(sectionA);
const sectionC = step2(sectionB);
...
複製代碼

說明

這種模式並沒有太多技巧可言,一般適合實踐類型的文章,按照操做順序來說解。

探索式

舉例

《GO千萬級消息推送服務》大綱:

技術核心難點
解決技術難點
架構考量
源代碼
複製代碼

文章結構簡單,邏輯清晰,先提出技術難點,而後給出技術解決方案。

模式

代碼

這種探索方式和循環有些相似:

while(!isBest(solution)) {
  solution = findBetterSolution()
  ...
}
複製代碼

說明

針對開發中的某個問題一步一步探索最優解決方案。通常的思路: 提出問題==>尋找解決方案==>現有方案的問題==>最終優化方案。

插畫式

舉例

《你閨女也能看懂的插畫版Kubernetes指南》這篇文章比較特別和少見,沒有明確的提綱,可是絲絕不影響閱讀體驗,由於圖文穿插的方式可以緩解閱讀疲勞,同時更容易理解。

模式

代碼

若是要用代碼來表示這種模式的話那麼咱們能夠把圖片當作註釋來進行描述:

// comment sectionA
sectionA
// comment sectionB
sectionB
...
複製代碼

小結

圖文結合,生動形象。

總結

總結一下本文提到的7種寫做模式,他們是:

  • 清單式。
  • 對比式。
  • 疑問式。
  • 發散式。
  • 流程式。
  • 探索式。
  • 插畫式。 固然咱們在寫較長的文章的時候能夠將多種寫做模式結合起來,全文用某種模式,而不一樣章節內部用其它模式。

若是要把這7種寫做模式抽象成寫做原則的話,那麼能夠用兩個詞歸納:轉化和聯接

何謂轉化?

  • 把複雜的事情講簡單。
  • 把簡單的道理講深入。

何謂聯接?

  • 把分散的東西關聯起來。
  • 把關聯的東西拆開對比。

最後給讀者一個思考題來檢驗閱讀效果:本文屬於那種寫做模式,你有沒有看出來呢?

原文連接:tech.gtxlab.com/writing-sch…


做者信息:朱德龍,人和將來高級前端工程師。

相關文章
相關標籤/搜索