经常抛出“保持高凝聚力和低耦合”(或某些变体)的口头禅。但是,我发现它经常与“不要重复自己”相冲突。
例如,我认为我们都同意重新实现std::string
或使用C字符串是一件坏事,但是不包括std::string
创建另一个依赖关系并因此增加耦合?
再举一个例子,取std::stringstream
。它继承自iostream
,继承自istream
和ostream
,继承自ios
,继承自ios_base
。在所有这些派生中,它继承了 lot 的功能 - 足以让手工重新实现一个非常糟糕的主意。它还会提取<ios>
和<istream>
标题,即使只包含<sstream>
,也会增加耦合。
如何在不重新设置每个模块的轮子的情况下保持低耦合?
编辑:如果这两个概念不能共存,哪一个应该受到青睐?答案 0 :(得分:3)
请在DRY上查看http://www.artima.com/intv/dry.html,
特别是“大多数人认为DRY意味着你不应该重复代码。这不是它的意图.DHY背后的想法远远超过那个”。
除此之外,在您讨论的示例中,std :: string和您的系统没有紧密耦合,因为您不依赖/使用std :: string的任何内部信息。对std :: string的任何(内部)更改都不会影响您的系统。