Acho que você está levando o princípio da repetição de código longe demais. Pense no ponto de evitar a repetição de código. O objetivo é reduzir a quantidade de código que deve ser verificada quando houver uma alteração na lógica e aumentar a compreensão fatorando blocos obviamente similares.
As falhas de fatorar para evitar a repetição são que, se um dos blocos compartilhados precisar mudar, agora você precisará de uma herança ainda mais complexa ou de alguma alternância entre a implementação padrão e a não-padrão.
Portanto, avalie cuidadosamente a possibilidade de a lógica de um desses blocos mudar sem os outros, contra os benefícios de compreensão obtidos ao considerar essa semelhança. Se uma implementação puder se separar das outras, é melhor você repetir o código.
Enquanto mantém esse código repetido, à medida que se torna mais complexo e o domínio do problema se torna mais definido, você pode achar mais apropriado fatorar as seções repetidas, agora mais complexas, mas também mais definidas.
Normalmente, tento manter a uniformidade do editor de texto por um tempo até ver se algo que parece repetitivo acaba valendo a pena ser fatorado. Eu apenas mantenho a repetição, mas olho para o futuro desse bloco, mantendo textualmente fácil a correspondência mais tarde.
Na maioria das vezes, a mesma coisa e o possível fatoramento começam a se dissipar, como reais, caprichosas, regras de negócios e lógica altamente dependente, muitas vezes arbitrária; como lidar com as esquisitices de várias implementações comuns de banco de dados (ANSI_NULLS ou algumas delas vêm à mente); forçando o que parecia ser uma lógica pura a uma confusão distorcida, tentando fornecer uma lógica de decisão razoável e defensável quando confrontada com a confusão do estado da indústria.
Parece-me que se as pessoas tentassem calcular o que você está tentando calcular, teríamos uma biblioteca inteira de construções inúteis como Do1Then2If2False Do1IfTrueDo2.
Tem que ser mais complexo e mais claro que o bloco não vai mudar para garantir a sua contabilização.
É software . Você pode voltar e editar alguns blocos iguais agora. Vai demorar 5 minutos. E você pode economizar horas gastando em fatoração desperdiçada e, em seguida, mais horas em herança desperdiçada e desenvolvimento de comutação, deixando-o e certificando-se de ter um bom teclado anti-RSI.