Поддержание низкого сцепления при соблюдении сухости - PullRequest
2 голосов
/ 04 июля 2011

Мантру «Сохраняйте высокую когезию и низкую связь» (или какой-либо вариант) часто бросают вокруг. Однако я нахожу, что это часто конфликтует с «Не повторяйся».

Например, я думаю, что мы все можем согласиться с тем, что плохая вещь - повторно реализовать std::string или использовать C-строки, но не включает в себя std::string создание другой зависимости и, следовательно, увеличение связи?

Для другого примера возьмите std::stringstream. Он наследуется от iostream, который наследуется от istream и ostream, который наследуется от ios, который наследуется от ios_base. По всем этим деривациям он наследует lot функциональности - достаточно, чтобы сделать ручную реализацию очень плохой идеей. Он также вытягивает заголовки <ios> и <istream>, хотя был включен только <sstream>, тем самым увеличивая сцепление.

Как сохранить низкое сцепление, не изобретая колесо для каждого модуля?

РЕДАКТИРОВАТЬ: Если два понятия не могут сосуществовать, какой из них следует отдать предпочтение?

1 Ответ

3 голосов
/ 04 июля 2011

Пожалуйста, пройдите через http://www.artima.com/intv/dry.html на СУХОЙ,
в особенности "Большинство людей считают, что СУХОЙ означает, что вы не должны дублировать код. Это не является его намерением. Идея СУХОГО гораздо шире, чем эта.".

Кроме того, в примере, который вы обсуждали, std :: string и ваша система тесно не связаны, поскольку вы не используете / не используете внутреннюю информацию std :: string.Любые (внутренние) изменения в std :: string не влияют на вашу систему.

...