天天看點

架構師動手寫了一個 helloworld

架構師不造工具,今天造了一個 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 了怎麼辦。

架構師動手寫了一個 helloworld

架構師版的helloworld

IDE 得裝上 300 個插件,打開項目硬碟響老半天吃掉 2GB 記憶體,然後一堆插件彈提示要求更新。

哦對了,在這一切發生之前,還得畫 UML 圖呢。三年後項目完工了,部署到客戶的伺服器上一跑,立馬崩潰,一地的 stack trace。

原來客戶伺服器上用的是 JDK 8 而新項目需要 JDK 11。然後問客戶你們不能更新嗎,答案是不行,因為另外一個企業級開發組給做的企業級解決方案隻支援 JDK 8。接着客戶把你們的架構師臭罵了一頓,你搞了那麼多設計就沒有想過可能會換 JDK 嗎?

内部 code review,架構師還在洋洋得意的說,我雖然不經常寫代碼,但我的代碼擴充性無人能敵!

架構師動手寫了一個 helloworld

架構師紙上談兵

會後一堆人在議論,架構師好像少寫了單元測試;文檔也沒有;還有人說架構師的單節點 hello world 挂了怎麼辦?