標簽:
- 遺留系統(tǒng)、DDD释漆、Bounded Context悲没、ACL、Eric Evans
目標受眾:
- 目標受眾:系統(tǒng)架構(gòu)師
關(guān)注問題:
- 如何在遺留系統(tǒng)的長尾效應(yīng)下男图,保持在之上建立新的功能和能力時示姿,可以不受遺留系統(tǒng)的限制與拖累,仍然可以采用全新的架構(gòu)甚至全新的工程方法逊笆,并保持相對獨立的快速演進栈戳?
解決方案:
- 通過將新的功能和能力封裝到新的獨立的上下文中,并擁有獨立并完全自主控制的數(shù)據(jù)存儲难裆,采用同步的機制保證與其他上下文的數(shù)據(jù)一致性子檀,形成完整獨立的Autonomous bubble,用同步復(fù)雜性換取上下文完整性乃戈。
解讀:
之前在介紹Architectural fitness function時命锄,我們談到無論一個系統(tǒng)初建時多么的新潮且純粹,都會隨著時間的洗禮偏化,慢慢成熟脐恩,慢慢衰老,就像我在技術(shù)的一生中描述的場景一樣侦讨。
碰到這種情況驶冒,很多情況下我們首先想到的就是推倒重建,希望可以重回初生時般的美好韵卤。但往往斥重金重建系統(tǒng)后骗污,在短暫的享受重獲新生的喜悅之后,依然逃離不開時間和需求的侵濁沈条,再一次走向衰老需忿,成為另一個嶄新的遺留系統(tǒng)。
有沒有兩全其美的方法蜡歹,既能保持對于遺留系統(tǒng)足夠敬畏屋厘,不用花費大量成本冒風險重建;又能應(yīng)用新的技術(shù)和架構(gòu)甚至工程方法為系統(tǒng)構(gòu)建新的功能和能力月而,在老樹上開出“新花”汗洒?
我們發(fā)現(xiàn)DDD(Domain-Driven Design)的作者Eric Evans早在2012年就提出的一種叫做Autonomous bubble pattern(自治氣泡模式)的模式,對于解決這樣的問題越來越有其用武之地父款。
這種模式乍一看溢谤,并無新奇之處瞻凤,無非就是為新的功能或是應(yīng)用創(chuàng)建一個新的限界上下文(Bounded Context),在新的上下文里采用全新的設(shè)計世杀,并通過Anticorruption Layer(ACL:防腐層)匹配舊的遺留系統(tǒng)而已阀参,常見的應(yīng)用場景就像Eric Evans在視頻中展示的一樣:
但Eric Evans提出的Autonomous bubble pattern,并不止于此瞻坝。
精妙之處在于蛛壳,他提出了另一種看似更復(fù)雜的解決方式,即為新的上下文提供完整的數(shù)據(jù)存儲能力湿镀。并通過同步(Synchronizing)的方式保持新的上下文與遺留系統(tǒng)中的數(shù)據(jù)一致性,如下圖伐憾。
Eric Evans在視頻中也坦言勉痴,這種方式相比與第一個方案會更加的”昂貴“,需要一些額外的工作來處理開發(fā)者們最為頭疼的”同步“問題树肃。
但我們認為由此帶來的”上下文自主性“和”對于開發(fā)摩擦力(development friction)的減少“蒸矛,是邁向現(xiàn)代化甚至未來架構(gòu)的第一步,也是重要且勇敢的一步胸嘴。
Blip來源:
::Techniques (TRIAL[ 2017.11 | 2018.05 ])::