Clean Code - System 系統
- 
	劃分系統的建造與使用 建造與使用相比是不同的過程,將所有關注的事情都分開來。 
- 
	主函式Main的劃分 main函式建造系統所需的物件,然後將物件傳遞給應用程式,應用程式只需要專注在使用它們。  
- 
	工廠 有些時後也要讓應用程式負起何時要產生物件的責任,可使用抽象工廠模式讓應用程式自行決定何時產生ListItems。  
- 
	相依性注入 將建立過程從使用中分離出來有種強大的機制稱之為相依性注入(Dependency Injection, DI), 這是控制反轉(Inverson of Control, IoC)在相依性管理的一種手段。 控制反轉為某物件的第二職責,移至其他專注於該職責的物件裡,也因此支援了單一職責原則。 一個物件不應該負責實體化對本身的相依,反而應該將這個責任交給另外一個授權機制,因而將控制權反轉。 DI容器會實體化所需的物件(通常視需求決定),然後使用建構子參數或設定者方法來串起物件的相依關係。 
- 
	擴大 如果我們持續保持適當的關注點分離,軟體系統的架構就能遞增地成長。 讓系統「一開始就做對」,是一個神話。反之,我們應只實現今天的故事(使用者所要求的功能),然後重構它,在進行系統的擴充,來實現新的故事。 
- 
	橫切關注點 
- 
	測試驅動的系統架構 一個最理想的系統架構,包含了模組化關注點領域,每個關注點都由普通的物件來實作,不同的領域之間,利用最小侵入性的剖面或類似剖面的工具將之整合。 
- 
	最佳化決策 模組化、關注點分離,降低複雜度 
- 
	總結 在所有的抽象層級中,意圖應該是清楚可辨視的。不管在設計系統或個別的模組時,千萬不要忘記使用最簡單就可能可以運作的方式。 
參考:
https://devstarsj.github.io/study/2018/12/11/study.cleanCode.11/