The Clean Architecture概述圖
上圖為Robert C。 Martin對The Clean Architecture的描述圖
1。 The Clean Architecture是方法論,而非具體
當我們說架構的時候,很多人會下意識的想到類似
單體架構
,
微服務
,或是
Spring全家桶
等架構的模式。
The Clean Architecture與上述完全不相關,它是一種方法論。也就是:
它不與具體的語言,框架相關聯
它不與具體的技術方向相關聯
1。1 不與語言,框架關聯
需要牢記在心,並不是Java才能應用這個架構,事實上,The Clean Architecture適合於所有語言,就筆者用過的幾個語言,Java,TypeScript,Kotlin,Swift等,均可以使用上述The Clean Architecture
所以,理所當然的,它更不會與具體的技術相關聯。事實上,
技術是實現細節
,這個在圖中的環型的層中的最外層,也就是The Clean Architecture認為它是最不重要的一層。
無論你用的是哪種技術框架,比如是用
關係型資料庫
或是
非關係型資料庫
,
JPA
或
Mybatis
,甚至於
傳統模式的程式設計
及
響應式程式設計
等,都可以也應該把整潔架構應用上
1。2 不與具體的技術方向相關聯
當我們說
架構
這個詞的時候,很容易讓人聯想到這只是架構師的事,而架構師這個專有名詞通常是應用於後臺,後臺當前主流是以
Java系
為主。很多人會想當然的認為,架構的東西只與後臺關聯。
這是一個極大的誤解
事實上,在筆者只從事
後端
方向開發的時候,也是這樣想當然的。但當筆者近些年,陸續主導Android,iOS以及前端React,TypeScript等專案開發的時候,才慢慢的理解
這是錯誤的理解
整潔架構事實上可以適應也應該適應於所有方向,特別是前端,移動端等,這些方向的技術人員通常對架構更缺少全域性觀,更容易陷入技術細節中去。
後續筆者會繼續論述如何在前端或移動端應用類似
整潔架構
及
領域驅動風格
的設計
2。 The Clean Architecture的基本特徵
如果你能理解或明白上述筆者所說的
整潔架構
是與語言,框架,技術方向無關的,那接下來的基於特徵就更進一步說明了這一點。
Robert C。 Martin論述了他所認為的The Clean Architecture具備的幾個基本特徵
與具體的技術框架無關
可測試的,並且不受UI,資料庫,第三方服務等外部影響
與UI無關的
不依賴第三方服務,與它們解耦
從上述的基於特徵也可以進一步論證,The Clean Architecture是與語言,框架,技術方向無關的。事實上也是,不管你從事哪方面的開發,上述原則都應該是你在編碼開發過程應該參考的基本原則,它同時也是
可維護性
的基本保證,做不到上述幾個原則,你的程式碼的就如空中閣樓,不可能有
維護性
可言
事實上,這也恰恰是我們大多數程式設計師不關注的地方。很多程式設計師會下意識的問:有什麼必要隔離具體的技術?Hibernate,壓根不會換
這是非常不成熟的表現。後續筆者會慢慢論述為什麼這種想法是非常幼稚與不成熟的
3。 The Clean Architecture的分層及依賴原則
3。1 The Clean Architecture的分層
從圖所示可以看出,The Clean Architecture大致上可以分為以下幾個層
Entities
Use Cases
Interface Adapters
Frameworks and Drivers。
當然,這只是一個概述,事實上,根據專案不同,你可以在這其中新增其它層。
後續筆者再來論述這幾個層,在這之前,先明確一個
黃金原則
,也就是依賴原則
3。2 The Clean Architecture的黃金原則
在講述其它原則之前,有一個必須要明晰的原則: The Clean Architecture的依賴原則
依賴是由外向內的,也就是
外層知道並依賴內層,內層不知道也完全不能呼叫外層
這是黃金法則,需要一再強調。
在這個架構中,具體的技術,框架。比如資料庫,網路框架等,是在最外層的。也就意味著你的專案中,核心業務不能呼叫知道任何與類似
JPA
或
Hibernate
的API呼叫。
很多人會問,怎麼做到?
後續筆者再慢慢道來。