首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环依赖与DRY

循环依赖与DRY
EN

Stack Overflow用户
提问于 2009-03-08 03:59:57
回答 4查看 1.7K关注 0票数 6

我正在设计一个可重用的类库,其中包含名为core.xml.dll和core.string.dll的两个程序集(以及其他程序集)。

xml程序集引用string程序集,以便使用某些字符串帮助器方法。

但是,现在有了一个字符串方法,它可以从使用xml程序集中包含的方法中受益。

如果我从字符串程序集引用xml程序集,我将创建一个循环依赖项,并且将无法从源代码生成这两个程序集。(即鸡和蛋的问题)。

为了遵循“不要重复自己”的原则,我希望避免在两个程序集中重复功能。如果我在实现中发现一个bug,我只想在一个地方修复它。

虽然我可以将程序集合并为一个程序集,但这并不理想,因为它会降低程序集的内聚性。

我需要重新构建和重新部署整个程序集,只是为了对特定类进行很小的更改。而且,最终,由于有如此多的依赖项,我可能最终会得到一个巨大的库程序集。

那么,在一组可重用的库程序集的上下文中,在这里使用的最佳方法是什么?另外,.NET框架本身是如何处理这个问题的呢?

(在反射器中,看起来System.Configuration.dll引用System.XML.DLL,反之亦然。这实际上是正确的吗?如果是这样,循环依赖是如何管理的?)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-08 04:15:49

同意刀子的观点。循环依赖是一种设计味道。毫不留情地重构它!

在业务对象紧密耦合的情况下,这可能是具有挑战性的。在大多数情况下,这可以通过依赖注入来解决。

伪C++示例:

代码语言:javascript
复制
class Employee {
    Company company;
};

class Company {
    vector<Employee> employees;
};

棘手吗?不必要的:

代码语言:javascript
复制
template<class CompanyT>
class Employee {
    CompanyT company;
};

class Company {
    vector<Employee<Company> > employees;
};

更多的原始类型必须依赖于更高的级别,可以被抽象为与任何类型的其他类型一起工作,只要它履行了它的合同。

票数 6
EN

Stack Overflow用户

发布于 2009-03-08 04:06:50

听起来你需要第三个组件...

票数 3
EN

Stack Overflow用户

发布于 2009-03-08 04:18:09

使其成为xml程序集中定义的扩展方法(基于您的注释“接受XML并转换为基于字符串的格式的转换方法”)。它正在处理xml。就像Linq为IEnumerable所做的那样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/623006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档