Мантру «Сохраняйте высокую когезию и низкую связь» (или какой-либо вариант) часто бросают вокруг. Однако я нахожу, что это часто конфликтует с «Не повторяйся».
Например, я думаю, что мы все можем согласиться с тем, что плохая вещь - повторно реализовать std::string
или использовать C-строки, но не включает в себя std::string
создание другой зависимости и, следовательно, увеличение связи?
Для другого примера возьмите std::stringstream
. Он наследуется от iostream
, который наследуется от istream
и ostream
, который наследуется от ios
, который наследуется от ios_base
. По всем этим деривациям он наследует lot функциональности - достаточно, чтобы сделать ручную реализацию очень плохой идеей. Он также вытягивает заголовки <ios>
и <istream>
, хотя был включен только <sstream>
, тем самым увеличивая сцепление.
Как сохранить низкое сцепление, не изобретая колесо для каждого модуля?
РЕДАКТИРОВАТЬ: Если два понятия не могут сосуществовать, какой из них следует отдать предпочтение?