1. 推薦度:
ASSESS[2018.05 ]
2. 所屬象限:
Tools
3. 關(guān)注問題:
- 如何在Java系統(tǒng)架構(gòu)下,應(yīng)用架構(gòu)適應(yīng)度函數(shù)(Architectural fitness function),來驅(qū)動(dòng)架構(gòu)演進(jìn)?
- 如何在Java系統(tǒng)架構(gòu)下,做系統(tǒng)演進(jìn)后架構(gòu)守護(hù),減緩系統(tǒng)腐化?
4. 解讀:
在上一期我們介紹了架構(gòu)適應(yīng)度函數(shù)(Architectural fitness function),也提到了ArchUnit,這期就來詳細(xì)介紹一下。
ARCHUNIT是用來檢查架構(gòu)特征的Java測試庫,比如包與類的依賴關(guān)系、注解驗(yàn)證、甚至層級(jí)一致性。它可以在你現(xiàn)有的測試方案中,以單元測試的方式運(yùn)行,但目前只能用于Java架構(gòu)。
ArchUnit測試套件可以合并到C(I 持續(xù)集成)環(huán)境或部署流水線,使我們很容易地以演進(jìn)式架構(gòu)的方式實(shí)現(xiàn)適應(yīng)度函數(shù)。
我們來看看ArchUnit都能做些什么:
-
Package Dependency Checks
-
Class Dependency Checks
-
Class and Package Containment Checks
-
Inheritance Checks
-
Annotation Checks
-
Layer Checks
-
Cycle Checks
想要了解更多,可以移步【官方用戶指南】
最后不得不說一下,架構(gòu)優(yōu)劣不取決于是否遵循某一個(gè)標(biāo)準(zhǔn),而是應(yīng)該取決于能否支撐業(yè)務(wù)的需要。約束越強(qiáng),反而會(huì)導(dǎo)致靈活度降低,架構(gòu)就會(huì)越加僵硬,缺少適應(yīng)性,產(chǎn)生冗余。
所以工具本身只是賦予了我們約束架構(gòu)的能力。但是能否正確地使用這種能力通過Fitness Function和演進(jìn)式架構(gòu)來促進(jìn)架構(gòu)對于業(yè)務(wù)的匹配度和適應(yīng)度;還是截然相反的錯(cuò)誤地濫用這種能力成為所謂的管理手段或是技術(shù)上的噱頭,最終導(dǎo)致系統(tǒng)架構(gòu)僵化,無法支撐業(yè)務(wù)需要,決定權(quán)還是在我們架構(gòu)師手中。
不要過度神話工具,也不要讓工具替我們背鍋,工具只是工具,工具本身沒有對錯(cuò)。
5. 工具:
6. 延展閱讀:
ArchUnit | Technology Radar | ThoughtWorks
雷達(dá)嗶嗶嗶 - #3-Architectural fitness function - 簡書






