此模式是「舊系統取代模式」的一部分

模擬舊系統

新系統與舊系統互動的方式,讓舊系統不會察覺任何變更。

2022 年 1 月 12 日

Ian CartwrightRob HornJames Lewis

逐步用新系統取代舊系統時,不可能完全將新舊世界隔離。一個 過渡架構 需要新世界提供資料(或其他互動)才能「維持運作」。

這種情況下,新系統必須符合一些現有的(通常是隱含的)合約,因此新系統必須模擬舊系統。

運作方式

透過探索舊系統的技術架構和目標架構願景,並了解現有和未來的業務流程,可以發現並利用接縫,將問題分解成各個部分。

模擬舊系統模式是這些接縫的促成者,並為不同的排序方法創造選項,也是這些方法的含意。

模擬舊系統通常會實現 Eric Evans 的《領域驅動設計》一書中的 防腐層 模式。由於 防腐層 的目的是

建立一個隔離層,讓客戶端能根據自己的領域模型使用功能。此層透過其他系統現有的介面與該系統對話,幾乎不需要修改其他系統。在內部,此層會在兩個模型之間進行必要的雙向轉換。

防腐層 類似,模擬舊系統的實作通常會使用服務、轉接器、轉譯器和外觀模式。

我們常見的模擬至少有 2 種類型,最容易用提供或使用服務來解釋。

服務提供模擬會將新實作封裝在舊式介面之後。舊式元件將能夠使用舊式介面與其互動,而不知道它們正在與新實作協作。

服務使用模擬會與尚未使用其現有舊式介面取代的舊式系統協作。同樣地,這種互動對舊系統來說是透明的。

使用時機

為了進一步說明這些不同類型的模擬,此圖顯示了一個支援 3 個業務流程(銷售、物流和業務績效)的單體舊式系統。

Legacy Mimic - Before example

正在考慮的選項是對物流功能使用萃取價值串流。這樣做可能會產生像這樣的過渡架構

Legacy Mimic - Example with mimic, acl and event interception

為了讓新的物流系統處理銷售的履行,建議使用事件攔截。在此範例中,事件攔截器是服務提供模擬的範例 - 它符合舊式介面(使用舊式事件)。

為了讓業務績效流程繼續運作,再次建議使用舊式模擬模式,但這次作為服務使用模擬。它會將所需的物流指標複製到舊式報告資料庫(符合舊式資料庫的架構和語意)。

這兩個元件都不會在系統的目標架構中持續存在 - 它們是過渡性的。

現有的物流合作夥伴系統仍必須整合,因此新的物流系統使用防腐層。由於這會持續存在,因此不被視為模擬(或過渡),但防腐層的建立是用於避免新物流系統的網域模型受到該外部系統所使用的模型影響。

Legacy Mimic - Sequence diagram with mimics and ACL

重大修訂

2022 年 1 月 12 日