在坚持干燥的同时保持低耦合

时间:2011-07-03 21:40:11

标签: oop language-agnostic coupling cohesion

经常抛出“保持高凝聚力和低耦合”(或某些变体)的口头禅。但是,我发现它经常与“不要重复自己”相冲突。

例如,我认为我们都同意重新实现std::string或使用C字符串是一件坏事,但是不包括std::string创建另一个依赖关系并因此增加耦合?

再举一个例子,取std::stringstream。它继承自iostream,继承自istreamostream,继承自ios,继承自ios_base。在所有这些派生中,它继承了 lot 的功能 - 足以让手工重新实现一个非常糟糕的主意。它还会提取<ios><istream>标题,即使只包含<sstream>,也会增加耦合。

如何在不重新设置每个模块的轮子的情况下保持低耦合?

编辑:如果这两个概念不能共存,哪一个应该受到青睐?

1 个答案:

答案 0 :(得分:3)

请在DRY上查看http://www.artima.com/intv/dry.html
特别是“大多数人认为DRY意味着你不应该重复代码。这不是它的意图.DHY背后的想法远远超过那个”

除此之外,在您讨论的示例中,std :: string和您的系统没有紧密耦合,因为您不依赖/使用std :: string的任何内部信息。对std :: string的任何(内部)更改都不会影响您的系统。