No haces DRY porque alguien lo escribió en un libro en algún lugar que es bueno hacer, lo haces DRY porque en realidad tiene beneficios tangibles.
Específicamente de esa pregunta:
Si se repite, puede crear problemas de mantenimiento. Si doStuff1-3 tiene un código estructurado de manera similar y soluciona un problema en uno, podría olvidarse fácilmente de solucionar el problema en otros lugares. Además, si tiene que agregar un nuevo caso para manejar, simplemente puede pasar diferentes parámetros a una función en lugar de copiar y pegar en todo el lugar.
Sin embargo, DRY a menudo es llevado al extremo por programadores inteligentes. A veces, para no repetirse, debe crear abstracciones tan obtusas que sus compañeros de equipo no puedan seguirlas. A veces, la estructura de dos cosas es solo vagamente similar pero lo suficientemente diferente. Si doStuff1-4 es lo suficientemente diferente como para que refactorizarlos para que no se repitan, tendrá que escribir un código no natural o someterse a un retroceso de codificación inteligente que hará que su equipo lo fulmine con la mirada, entonces puede estar bien repetirlo. Me he esforzado por no repetirme un par de veces de forma antinatural y lamenté el producto final.
Entonces, básicamente, no pienses "oh hombre, este código es bastante similar, tal vez debería refactorizar para no repetirme". Piense "¿la refactorización para hacer que esta base de código reutilice elementos comunes hace que el código sea más fácil de mantener o menos mantenible ?" Luego, elija el que lo haga más fácil de mantener.
Dicho esto, dado el SRP y solo tratar de tener clases pequeñas y flexibles en general, podría tener sentido analizar su código por esa razón , separar partes de comportamiento que usan tipos genéricos (usted dijo que son idénticos aparte del tipo) en Clases pequeñas. Luego descubrirá que algunas de estas clases en realidad son totalmente idénticas (no solo casi idénticas), y luego puede crear un kit de herramientas en caso de que desee agregar Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.