【发布时间】:2011-03-19 06:30:26
【问题描述】:
请通俗地描述一下.NET程序集编译循环依赖问题,其他技术是否有类似限制。
注意:这似乎是一个简单的问题,我知道,但我已经看到了许多真正的、重要的项目完全破坏了依赖关系图。
【问题讨论】:
标签: .net assemblies dependencies
请通俗地描述一下.NET程序集编译循环依赖问题,其他技术是否有类似限制。
注意:这似乎是一个简单的问题,我知道,但我已经看到了许多真正的、重要的项目完全破坏了依赖关系图。
【问题讨论】:
标签: .net assemblies dependencies
我是工具NDepend 的开发人员之一,该工具专门用于强制执行干净的代码结构和消除依赖循环的 .NET 开发人员。在我们的产品网站上,您会找到与组件依赖周期问题相关的two white-books:
Partitioning code base through .NET assemblies and Visual Studio projects(8 页)
Defining .NET Components with Namespaces(7 页)
【讨论】:
补充卢卡斯的答案:在.NET 中很难提出循环程序集 依赖项。为了编译A.dll,你首先需要B.dll;编译B.dll首先需要C.dll;但是要编译C.dll,您需要首先尝试编译的A.dll。
您可能会遇到这种情况的唯一方法是,如果您正在并行开发 A、B 和 C,并且您无意中引入了循环依赖项。但是,一旦您对所有三个都进行了干净的构建,问题就会很明显,并且在您打破循环之前您将无法继续。
单个依赖项中命名空间和/或类之间的循环依赖项更为常见。我尝试将这种循环依赖视为代码异味;组件之间没有循环依赖的代码库是那些组件可以很容易地保持分离和独立重构的代码库。
Patrick Smacchia(NDepend 人)在这里谈了一点依赖循环及其对代码质量的影响:http://codebetter.com/blogs/patricksmacchia/archive/2009/07/29/maintainability-learnability-component-layering.aspx
【讨论】:
与任何其他循环依赖相同...
考虑三个程序集 A、B 和 C
A 需要 B 中定义的东西,B 需要 C 中定义的东西,C 需要 A 中定义的东西。
你可以先构建哪个?
【讨论】: