欢迎光临散文网 会员登陆 & 注册

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

2021-06-18 22:23 作者:tkchenhaha  | 我要投稿

       第十一章非常非常重要!內容有難度作者談到了系統,讀者要對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基本概念介紹

https://ithelp.ithome.com.tw/articles/10156571

擴大

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

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

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

橫切關注點

AOP 觀念與術語

https://openhome.cc/Gossip/SpringGossip/AOPConcept.html

Java代理機制

從代理機制初探 AOP

https://openhome.cc/Gossip/SpringGossip/FromProxyToAOP.html

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

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

純Java  AOP 框架

動態代理

https://openhome.cc/Gossip/SpringGossip/DynamicProxy.html


AspectJ 剖面設計

測試驅動的系統架構

最佳化決策

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

系統需要特定領域的語言

總結



Clean Code 無瑕的程式碼 第11章 系統的评论 (共 条)

分享到微博请遵守国家法律