Clean Code 無瑕的程式碼 第11章 系統

       第十一章非常非常重要!內容有難度作者談到了系統,讀者要對java有一定層度的了解,才能完全明白第十一章的內容,我對Java不熟,在網路上找了一些文章,勉強知道部分內容。


你要如何建造一個城市?


作者用城市比喻軟體,城市如同系統軟體有很多區域,每個區域有各自的功能。


劃分系統的建造與使用


「建造」與「使用」應該要分開,如同蓋房子與住房子是兩件不同的事情。


大部分的城市卻沒有把兩件事情分開,出現延遲初始的情況。


public Service getService(){


    if(service == null)


        service = new MyServiceImpl(....);


    return service;


}


上面的例子包含了延遲初始/延遲賦質(LAZY Initialization/Evaluation)


延遲初始/延遲賦質寫法的優點


要使用的時候,再建立物件


初始化時間變短


保證函式不回回傳null


延遲初始/延遲賦質寫法的缺點


相依於MyServiceImpl,等於程式寫死


測試會較困難


違反單一職掌原則


作者主張「建造的過程」要從「正常邏輯」分離出來。


主函式Main的劃分


最簡單的方法將「建造程式」都移到主函式main或主函式呼叫的模組builder。


11-1的圖寫明了順序


 


1.build 先new 物件


2.再run程式


 


工廠


 


第一種方法是建立好物件可當做參數傳給應用程式。有時候應用程式要負責「何時」要產生物件,此時可用抽象工廠模式。


 


11-2 應用程式要用LineItem物件的時候,呼叫工廠建造程式可以得到物件。


 


相依性注入


 


這段內容談到相依性注入、控制反轉。可參考王洪亮先生的著作《我的程式碼會說話》7.2 相依性注入


 


相依性注入的另外一個名字控制反轉,這種方式實現了程式碼的熱插拔。採用相依性注入,可以透過 xml 來配置名稱和運算,進行更自由的擴展。


 


我的理解是程式建立物件的過程中,可以讀取外部xml創建物件。xml可以更改,程式就不會寫死變得有彈性。


 


這篇文章寫得淺顯易懂


 


IoC基本概念介紹


擴大


小城市起初在興建的時候不會考慮到以後會不會變成大城市,同樣的情況小程式起初不會考慮未來會不會變成大程式。


保持適當的關注點分離,軟體系統的架構就能夠遞增地成長。


說人話就是要想辦法降低軟體與軟體之間的相依性,軟體才可以擴展與重複使用。


橫切關注點


AOP 觀念與術語


 


Java代理機制


從代理機制初探 AOP


看文中的圖就能明白Java代理的奧妙,第十一章後半段講述的AOP剖面設計都在做類似的事情,差別在於方法不同。


平常寫程式的時候寫log就直接加上去,實際上除錯程式都是對原本商業程式的「破壞」,這段程式變得無法再利用,也會造成不利於測試驅動開發,AOP要解決程式被「破壞」的問題。


純Java  AOP 框架


動態代理


Spring框架入門之AOP


 


AspectJ 剖面設計


測試驅動的系統架構


最佳化決策


聰明地利用可明顯增加價值的標準


系統需要特定領域的語言


總結


 


留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我