整潔架構之道(二) 初識整潔架構

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呼叫。

很多人會問,怎麼做到?

後續筆者再慢慢道來。