项目/dll架构避免循环引用但保持模块化

问题描述 投票:0回答:1

假设我有两个 dll 项目:A1.dll 和 B1.dll。假设 B1.dll 引用 A1.dll。 现在假设我想添加与 A1.dll 中已有的功能类似的功能,但因为添加的功能必须引用 B1.dll,所以我假设我必须创建 A2.dll。 (如果我只是将此功能添加到现有的 A1.dll 中,我将导致循环引用,我认为应该避免这种情况。)

所以现在我有A1.dll、引用A1.dll的B1.dll和继承自A1.dll并引用B1.dll的A2.dll。我们希望 A2.dll 继承 A1.dll,以便所有“A”功能都可以从 A2.dll 引用。一切都很好。 如果我现在想向 B1 添加功能,并且该新功能必须引用 A2,那么我假设我必须创建一个继承自 B1.dll 并引用 A2.dll 的 B2.dll。 这可以持续很多很多层面的参考。这是正确的方法还是我错过了什么?

是的,我知道我可以将所有功能放入一个 dll 中,但我正在尝试按主要功能(A 与 B)组织我的项目,以便在维护时具有一定的模块化性。

如有任何帮助,我们将不胜感激。

.net oop dll
1个回答
0
投票

您确实应该避免循环引用。这称为非循环依赖原则 (ADP)。您可以在 Robert C. Martin 的 APPP 中阅读更多相关信息。

那本书是详细介绍此类与面向对象架构相关的问题的众多书籍之一。

实现 ADP 目标的最有效方法之一是另一个原则,即“依赖倒置原则”(DIP),它表示实现细节应该依赖于抽象,而不是相反。 Robert C. Martin 撰写了大量有关 DIP 和架构解耦其他主题的文章。其他人也是如此。另一个很好的基础资源是 Alastair Cockburn 的

六边形架构

,也称为端口和适配器 如果您想在 C# 上下文中了解有关端口和适配器的更多信息,可以从我的文章

层、洋葱、端口、适配器:都是一样的

开始。

© www.soinside.com 2019 - 2024. All rights reserved.