我正在设计一个可重用的类库,其中包含2个名为core.xml.dll和core.string.dll的程序集(以及其他程序集).
xml程序集引用字符串程序集以使用某些字符串帮助程序方法.
但是现在有一个字符串方法可以从使用xml程序集中包含的方法中受益.
如果我从字符串程序集引用xml程序集,我将创建一个循环依赖项,并且无法从源代码构建两个程序集.(即鸡肉和鸡蛋问题).
为了遵循"不要重复自己"的原则,我希望避免重复两个程序集中的功能.如果我在实现中发现错误,我只想在一个地方修复它.
虽然我可以将组件合并为一个,但这并不理想,因为它会降低组件的内聚性.
我需要重新构建和重新部署整个程序集,只是为了对特定类进行小的更改.而且,最终,有这么多的依赖关系,我可能会最终得到一个巨大的库程序集.
因此,在可重用的库集合集的上下文中,这里使用的最佳方法是什么?另外,.NET框架本身如何处理这个问题?
(在Reflector中,似乎System.Configuration.dll引用System.XML.DLL,反之亦然.这实际上是否正确,如果是这样,如何管理循环依赖?)
同意刀具.循环依赖是一种设计气味.无情地重构它!
在业务对象紧密耦合的情况下,这可能具有挑战性.在大多数情况下,这可以通过依赖注入来解决.
伪C++示例:
class Employee { Company company; }; class Company { vectoremployees; };
整蛊?不必要的:
templateclass Employee { CompanyT company; }; class Company { vector > employees; };
必须依赖于更高级别的更原始类型可以被抽象为与任何其他类型一起工作,只要它履行其合同即可.