我正在设计一个可重用的类库,其中包含名为core.xml.dll和core.string.dll的两个程序集(以及其他程序集)。
xml程序集引用string程序集,以便使用某些字符串帮助器方法。
但是,现在有了一个字符串方法,它可以从使用xml程序集中包含的方法中受益。
如果我从字符串程序集引用xml程序集,我将创建一个循环依赖项,并且将无法从源代码生成这两个程序集。(即鸡和蛋的问题)。
为了遵循“不要重复自己”的原则,我希望避免在两个程序集中重复功能。如果我在实现中发现一个bug,我只想在一个地方修复它。
虽然我可以将程序集合并为一个程序集,但这并不理想,因为它会降低程序集的内聚性。
我需要重新构建和重新部署整个程序集,只是为了对特定类进行很小的更改。而且,最终,由于有如此多的依赖项,我可能最终会得到一个巨大的库程序集。
那么,在一组可重用的库程序集的上下文中,在这里使用的最佳方法是什么?另外,.NET框架本身是如何处理这个问题的呢?
(在反射器中,看起来System.Configuration.dll引用System.XML.DLL,反之亦然。这实际上是正确的吗?如果是这样,循环依赖是如何管理的?)
发布于 2009-03-08 04:15:49
同意刀子的观点。循环依赖是一种设计味道。毫不留情地重构它!
在业务对象紧密耦合的情况下,这可能是具有挑战性的。在大多数情况下,这可以通过依赖注入来解决。
伪C++示例:
class Employee {
Company company;
};
class Company {
vector<Employee> employees;
};棘手吗?不必要的:
template<class CompanyT>
class Employee {
CompanyT company;
};
class Company {
vector<Employee<Company> > employees;
};更多的原始类型必须依赖于更高的级别,可以被抽象为与任何类型的其他类型一起工作,只要它履行了它的合同。
发布于 2009-03-08 04:06:50
听起来你需要第三个组件...
发布于 2009-03-08 04:18:09
使其成为xml程序集中定义的扩展方法(基于您的注释“接受XML并转换为基于字符串的格式的转换方法”)。它正在处理xml。就像Linq为IEnumerable所做的那样。
https://stackoverflow.com/questions/623006
复制相似问题