架構師不造工具,今天造了一個 helloworld!
今天我們不聊技術,聊一聊過渡設計。
我們以 helloworld 為例!普通程式員寫了一個 Java 輸出 hello world 程式!架構師一看,滿臉不屑。到處找釘子,你的程式太 low 了,不支援多語言,不支援友好擴充!
然後架構師動手寫了一個 hello world!
架構師的思路如下:
main 函數裡 print 一下?
太面向過程,太 low 了。得封裝一個類。叫 Printer,Printer 有個成員方法,叫 print。
但是!光一個類太 low 了,以後要是有不同的實作怎麼辦?是以得加一個接口。PrinterInterface。
但是!interface 是沒有實作的,還是要有預設實作才行。是以得加個抽象類,AbstractPrinter 實作 PrinterInterface,然後 Printer 繼承 AbstractPrinter。
但是!你有了那麼一套,該怎麼建立執行個體呢?直接 new Printer()?太 low 了,那叫實作依賴。肯定不行的,是以要搞一個工廠類,PrinterFactory,PrinterFactory 用 PrinterInterface 傳回執行個體,這樣就隐藏了實作細節了。
但是!PrinterFactory 本身也是實作類啊,太 low 了,是以得有 PrinterFactoryInterface,AbstractPrinterFactory。
而且在 PrinterFactory 裡面該怎麼寫呢?直接 new Printer() ? 太 low 了。還是實作依賴。
最後,你要把這一堆玩意在代碼裡組裝起來,也太難看了,各種 new 實作類。太 low!
好在我們有個進階玩意,叫依賴注入!把程式對象結構全寫到配置檔案裡面。這一套當然是不能自己造輪子的。配置 Spring 吧。搞了那麼多 lib,靠指令行或者 IDE 的項目管理肯定不夠啊,得有依賴管理。Maven 啊 Gradle 啊使勁上。
最最後,要 print 的東西怎麼傳給程式呢?寫死?指令行傳參數?太 low!當然得寫在 XML 裡頭。
光是 XML 當然還不夠企業級,再加上 DTD 驗證吧。
然後就涉及到了 XML 解析的問題了。代碼裡直接操起 parser 嗎?太 low! 當然要寫個 parser 的包裝類,interface,abstract class,implementation class,factory class 再來一套。畢竟,不能依賴實作啊,以後我要是換 parser 了怎麼辦。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN3QzM1QjNiJ2YkJTOwIjZyYzX5QzMxUTM5AzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
架構師版的helloworld
IDE 得裝上 300 個插件,打開項目硬碟響老半天吃掉 2GB 記憶體,然後一堆插件彈提示要求更新。
哦對了,在這一切發生之前,還得畫 UML 圖呢。三年後項目完工了,部署到客戶的伺服器上一跑,立馬崩潰,一地的 stack trace。
原來客戶伺服器上用的是 JDK 8 而新項目需要 JDK 11。然後問客戶你們不能更新嗎,答案是不行,因為另外一個企業級開發組給做的企業級解決方案隻支援 JDK 8。接着客戶把你們的架構師臭罵了一頓,你搞了那麼多設計就沒有想過可能會換 JDK 嗎?
内部 code review,架構師還在洋洋得意的說,我雖然不經常寫代碼,但我的代碼擴充性無人能敵!
架構師紙上談兵
會後一堆人在議論,架構師好像少寫了單元測試;文檔也沒有;還有人說架構師的單節點 hello world 挂了怎麼辦?