导入
边界与依赖关系
了解我们的架构中边界的所在位置,以及“边界 enforcement”实际意味着什么。
简介
在前面的章节中,我们已经深入探讨了架构设计,并且拥有一个明确的目标架构来指导我们编写代码的方式以及代码的组织位置,这非常有益。
然而,在每一个规模较大的软件项目中,架构往往会随着时间推移而逐渐退化。层与层之间的边界变得模糊,代码越来越难以测试,而实现新功能所需的时间也不断增加。
在本章中,我们将讨论一些可行的方法,用以强化架构内部的边界,从而防止架构的退化。
依赖关系
(图示:强制实施架构边界意味着确保依赖关系朝正确的方向指向。图中虚线箭头表示根据我们的架构设计所不允许存在的依赖关系。)
上图展示了六边形架构中的各个组件如何分布在四个层次中,这种分层方式类似于“反转依赖”一章中介绍的通用整洁架构(Clean Architecture)模型。
分层及其职责
最内层包含领域实体。应用层可以访问这些领域实体,通过应用服务来实现具体的用例逻辑。适配器通过入站端口调用这些服务,或通过出站端口被服务所调用。最后,配置层包含用于创建适配器和服务对象的工厂,并将这些对象提供给依赖注入机制。
在上图中,我们的架构边界非常清晰:每一层与其相邻的内外层之间都存在明确的边界。
根据依赖规则(Dependency Rule),跨越层边界的依赖关系必须始终指向内层。
本章的重点就是如何强制实施这一依赖规则。我们的目标是确保不存在违反规则的非法依赖关系(即图中所示的红色虚线箭头所代表的反向依赖)。