避免循环依赖的架构设计

本文关键字:循环 依赖 | 更新日期: 2023-09-27 18:03:26

我有一个适配器查找并返回它。但我需要一个保持适配器的参考与所有的来源。但是这种设计会创建一个循环依赖。

IAdaptor需要一个返回ISource列表的函数,并且每个ISource需要保留一个自己的Adaptor的引用。

ISource保存在项目1中,IAdaptor保存在项目2中

我如何做到这一点,而不创建彼此之间的循环依赖?

避免循环依赖的架构设计

我建议你看一下ISource真正需要IAdaptor的哪些功能:从ISource实现中调用IAdaptor上的哪些方法,这些方法是否真正与IAdaptor绑定。

在某些情况下,将这些功能从IAdaptor中移出,作为一个单独的、更通用的接口(我将其称为ISourceDependency),并将其放在ISource的同一个程序集中,可能是合适的。ISource将依赖于ISourceDependency而不是IAdaptor,因此循环依赖被移除。然后你只需要让适配器在IAdaptor之外实现ISourceDependency。

如果你发现ISourceDependency上的方法与IAdapter的逻辑紧密相连,那么最好将IAdapter与ISource放在同一个程序集中。