工程中的“面向對象”編程
在工程處理中,工程師很容易寫出碎片的腳本代碼,例如處理服務器上的腳本:
- 假設了一些存在的環境變量、目錄結構、配置和數據
- 腳本基於這些假設開始做一堆中間處理,並最終得到一些輸出數據。
即使有了docker,有了k8s,無論是在docker外,還是docker內,還是會有很多這樣的工程處理腳本。
這些工程處理腳本非常容易碎片化,寫這樣的代碼也很容易就沒有模塊化,缺乏明顯的數據結構與算法的分離。
一種好的編程方式是,一旦開始寫這樣的腳本,從一開始就做“面向對象”抽象,例如
- 設計一個 Config 對象,處理好全局配置的處理,做好不同名稱空間的配置的正交組織,做好從配置服務、本地配置、以及命令行配置的管理。
- 設計一個 Option 對象,處理好命令行參數和選項的管理。
- 設計一個 Machine 對象,這個對象封裝了內部的各種處理細節,對外暴露出一個邏輯上機器的目錄結構、配置和數據。
- 設計一個 Group 對象,處理好一組 Machine 的組織和管理。
- 設計一個 System 對象,這個對象組織好 Config, Option, 一個到多個 Group 的組織。
- 設計一系列的 Executor 對象,遵循單一職責原則,處理好每個明確定義職責的基於 Config, Option, Group 環境下的明確任務執行。
- 設計一系列的 Schduler 對象,負責調度應用層的任務到 Executor 執行。
這是一個基本的工程中的“面向對象”編程,無論在哪一個抽象層上,這些都免不了。
--end--