如何把一段簡單的代碼變復(fù)雜?
這問題你應(yīng)該去問企業(yè)級Java架構(gòu)師。
就比如print一句hello world吧。main函數(shù)里print一下?太面向過程,太low了。
得封裝一個類。叫Printer. Printer有個成員方法,叫print。
但是!光一個類太low了,以后要是有不同的實現(xiàn)怎么辦?所以得加一個接口。PrinterInterface。
但是!interface是沒有實現(xiàn)的,還是要有默認實現(xiàn)才行。所以得加個虛擬類,AbstractPrinter實現(xiàn)PrinterInterface,然后Printer繼承AbstractPrinter。
但是!你有了那么一套,該怎么創(chuàng)建實例呢?直接new Printer()?太low了,那叫實現(xiàn)依賴。肯定不行的,所以要搞一個工廠類,PrinterFactory,PrinterFactory用PrinterInterface返回實例,這樣就隱藏了實現(xiàn)細節(jié)了。
但是!PrinterFactory本身也是實現(xiàn)類啊,太low了,所以得有PrinterFactoryInterface, AbstractPrinterFactory.
而且在PrinterFactory里面該怎么寫呢?直接new Printer()? 太low了。還是實現(xiàn)依賴。
最后,你要把這一堆玩意在代碼里組裝起來,也太難看了,各種new實現(xiàn)類。太low!
好在我們有個高級玩意,叫依賴注入!把程序?qū)ο蠼Y(jié)構(gòu)全寫到配置文件里面。這一套當(dāng)然是不能自己造輪子的。配置Spring吧。搞了那么多l(xiāng)ib,靠命令行或者IDE的項目管理肯定不夠啊,得有依賴管理。Maven啊Gradle啊使勁上。
最最后,要print的東西怎么傳給程序呢?硬編碼?命令行傳參數(shù)?太low!當(dāng)然得寫在XML里頭。
光是XML當(dāng)然還不夠企業(yè)級,再加上DTD驗證吧。
然后就涉及到了XML解析的問題了。代碼里直接操起parser嗎?太low! 當(dāng)然要寫個parser的包裝類,interface, abstract class, implementation class, factory class再來一套。畢竟,不能依賴實現(xiàn)啊,以后我要是換parser了怎么辦。
所以最后是成品是一堆配置文件,一堆jar,compile出來的程序200MB。
IDE得裝上300個插件,打開項目硬盤響老半天吃掉2GB內(nèi)存,然后一堆插件彈提示要求升級。
哦對了,在這一切發(fā)生之前,還得畫UML圖呢。
三年后項目完工了,部署到客戶的服務(wù)器上一跑,立馬崩潰,一地的stack trace。原來客戶服務(wù)器上用的是JDK 5而新項目需要JDK 6. 然后問客戶你們不能升級嗎,答案是不行,因為另外一個企業(yè)級開發(fā)組給做的企業(yè)級解決方案只支持JDK 5。接著客戶把你們的架構(gòu)師臭罵了一頓,你搞了那么多設(shè)計就沒有想過可能會換JDK嗎?
