Вы не делаете СУХОЙ, потому что кто-то написал это в книге где-то, что это хорошо делать, вы делаете СУХОЙ, потому что это на самом деле имеет ощутимые преимущества.
Именно из этого вопроса:
Если вы повторитесь, вы можете создать проблемы с ремонтопригодностью. Если все doStuff1-3 имеют схожий структурированный код и вы решаете проблему в одном, вы можете легко забыть исправить проблему в других местах. Кроме того, если вам нужно добавить новый регистр для обработки, вы можете просто передать различные параметры в одну функцию, а не вставлять копию повсеместно.
Однако умные программисты часто доводят DRY до крайности. Иногда, чтобы не повторяться, вы должны создавать абстракции, настолько тупые, что ваши товарищи по команде не могут следовать за ними. Иногда структура двух вещей только смутно похожа, но достаточно различна. Если doStuff1-4 отличаются настолько, что рефакторинг их, чтобы они не повторялись, заставляет вас писать неестественный код или делать умные откаты кодирования, которые заставят вашу команду смотреть на вас, тогда, возможно, будет хорошо повторить себя. Я наклонился назад, чтобы не повторяться пару раз неестественным образом, и пожалел о конечном продукте.
Так что, в принципе, не думайте: «О, чувак, этот код очень похож, может быть, я должен рефакторинг, чтобы не повторяться». Подумайте: «Разве рефакторинг, чтобы заставить эту кодовую базу повторно использовать общие элементы, делает код более понятным или менее обслуживаемым ?» Затем выберите тот, который делает его более ремонтопригодным.
При этом, учитывая SRP и просто пытаясь иметь небольшие гибкие классы в целом, может иметь смысл проанализировать ваш код по этой причине , разбить на части фрагменты поведения, которые используют универсальные типы (вы сказали, что они идентичны, кроме типа), в маленькие классы. Затем вы обнаружите, что некоторые из этих классов на самом деле полностью идентичны (а не просто идентичны), и затем вы можете создать инструментарий на случай, если захотите добавить Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.