此模式是 "遗留系统替换模式" 的一部分

遗留模拟

新系统以旧系统无法感知任何更改的方式与旧系统交互。

2022 年 1 月 12 日

Ian CartwrightRob HornJames Lewis

逐步用新系统替换旧系统时,不可能将新世界与旧世界完全隔离。一个 过渡架构 要求新世界提供数据(或其他一些交互)以“保持灯火通明”。

在这种情况下,新系统必须满足一些现有的(通常是隐式的)契约,因此新系统必须成为遗留模拟。

工作原理

通过探索遗留系统的技术架构和目标架构愿景,并了解现有和将来的业务流程,可以发现和利用缝隙,从而将问题分解成多个部分。

遗留模拟模式是这些缝隙的推动者,并为不同的排序方法创造了选择,也是其含义之一。

遗留模拟通常实现 Eric Evans 的领域驱动设计书籍中的 反腐败层 模式。由于 反腐败层 的目的是,因此存在类似的力量在起作用

创建一个隔离层,以使用其自身领域模型的术语为客户端提供功能。该层通过其现有接口与另一个系统通信,几乎不需要修改另一个系统。在内部,该层根据需要在两个模型之间进行双向转换。

反腐败层 类似,遗留模拟的实现通常会使用服务、适配器、转换器和外观。

我们通常会看到至少两种类型的模拟,最容易用提供或使用服务来解释。

服务提供模拟 将封装一个新实现,使其隐藏在遗留接口后面。遗留组件将能够使用遗留接口与之交互,而不知道它们正在与该新实现协作。

服务使用模拟 将与尚未替换的遗留系统协作,使用其现有的遗留接口。同样,这种交互对于旧系统来说是透明的。

何时使用

为了进一步说明这些不同类型的模拟,此图显示了一个支持 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 日