Я думаю, что вы слишком далеко зашли с принципом повторения кода. Подумайте о том, как избежать повторения кода. Задача состоит в том, чтобы уменьшить объем кода, который должен быть проверен при изменении логики, и улучшить понимание, выделив блоки с явно подобным предназначением.
Недостатки факторинга во избежание повторения состоят в том, что если необходимо изменить один из общих блоков, теперь вам нужно еще более сложное наследование или некоторое переключение между стандартной и нестандартной реализацией.
Поэтому тщательно взвесьте возможность изменения логики хотя бы одного из этих блоков без изменения других в сравнении с преимуществами понимания, полученными с учетом этой общности. Если одна реализация может отделиться от других, вам, скорее всего, лучше просто повторить код.
Поддерживая этот повторяющийся код, поскольку он становится более сложным и ваша проблемная область становится более определенной, вы можете найти его более подходящим для выделения повторяющихся, теперь более сложных, но также более определенных разделов.
Я обычно стараюсь поддерживать одно и то же время в текстовом редакторе, пока не увижу, стоит ли что-то, что выглядит повторяющимся, стоит факторинга. Я просто сохраняю повторение, но я слежу за будущим этого блока, сохраняя его в текстовом виде, чтобы его можно было сопоставить позже.
Много времени, одно и то же, и возможный факторинг, начинает рассеиваться как реальные, капризные, бизнес-правила и весьма зависимая, часто произвольная логика; например, иметь дело со странностями нескольких распространенных реализаций базы данных (ANSI_NULLS или некоторые другие, которые приходят на ум); превращая то, что казалось чистой логикой, в запутанный беспорядок, пытаясь обеспечить разумную, оправданную логику принятия решений, когда сталкиваешься с беспорядком в отрасли.
Мне кажется, что если бы люди пытались выделить то, что вы пытаетесь, у нас была бы целая библиотека бесполезных конструкций, таких как Do1Then2If2False Do1IfTrueDo2.
Это должно быть более сложным и более ясным, что блок не собирается меняться, чтобы оправдать его факторизацию.
Это программное обеспечение . Вы можете вернуться и отредактировать пару одинаковых блоков прямо сейчас. Это займет 5 минут. И вы можете сэкономить часы потраченного впустую факторинга, а затем часы потраченного впустую наследования и разработки коммутации, просто оставив его и убедившись, что у вас есть хорошая клавиатура против RSI.