Logo
Section 1 / 8

通过持久化适配器实现依赖倒置

学习如何通过持久化适配器实现依赖倒置。

导入

通过持久化适配器实现依赖倒置

学习如何通过持久化适配器实现依赖倒置。

简介

在章节 “分层架构的问题” 中,我们讨论了传统的分层架构,并分析了它为何支持“以数据库为中心的设计”,因为最终所有层级都依赖于持久化层。在本章中,我们将探讨如何将持久化层变为应用层的一个插件,从而反转这种依赖关系。

我们将不再使用“持久化层”这一概念,而是引入一个提供持久化功能的持久化适配器,由它为应用服务提供支持。下图展示了我们如何通过依赖倒置原则实现这一点。

持久化适配器概述

...
核心中的服务通过端口访问持久化适配器。

我们的应用服务通过调用端口接口来使用持久化功能。这些端口由持久化适配器类实现,后者负责执行实际的持久化操作,并与数据库进行通信。

在六边形架构术语中,持久化适配器是一种“被驱动的”或“向外的”适配器,因为它是由我们的应用调用的,而不是反过来。

Course Image

端口实际上在应用服务和持久化代码之间提供了一层间接性。我们需要记住,添加这层间接性的目的是让我们能够在演进领域代码时无需考虑持久化相关的问题,也就是说,核心代码不依赖于持久化层。因此,对持久化代码的重构并不必然导致核心代码的修改。

当然,在运行时,应用核心仍然依赖于持久化适配器。例如,如果我们修改了持久化层的代码并引入了缺陷,仍有可能破坏核心功能。但只要适配器实现的端口契约保持不变,我们就可以自由地更改持久化适配器内部的实现,而不会影响到核心逻辑。

实现一个 Web 适配器

持久化适配器的职责