Como todas las herramientas, depende de cómo lo use.
Como comentó Alex Fortune, el polimorfismo es la respuesta generalmente aceptada, y como Jaanis Kruumins responde, no hay nada de malo si se usa correctamente. Como él dice, no es un patrón “malo”.
Creo que es útil examinar ese umbral como una cuestión de costo, para el desarrollador por mantener el código y para el propietario, para mitigar el riesgo de que los costos del código excedan el valor del código.
- ¿Qué es una buena aplicación de clasificados en asp.net?
- ¿Cuál es la mejor manera para que un principiante comience a aprender Ruby on Rails?
- ¿Se pueden usar expresiones regulares en el método replace?
- ¿Debo aprender programación competitiva o simplemente centrarme en el desarrollo web?
- ¿Cuáles son los frameworks / tecnologías relacionadas con Java que están actualmente de moda y más 'en demanda'? ¿Por qué?
El mayor costo que veo es tener múltiples bloques if-else en la misma función o incluso diferentes áreas del proyecto, que dependen de la misma condición para operar. Este es un peligro de “aliasing”. Si alguien cambia incluso una de esas condiciones y no puede cambiarlas todas, entonces el código se volverá incoherente. Como no hay salvaguardas en tiempo de compilación para que esto no ocurra, este es un problema grave.
El polimorfismo lo resuelve seleccionando todas las rutas de código A frente a las rutas de código B a la vez. La condición se evalúa solo una vez, para determinar qué objeto se instancia. A partir de ese momento, la condición no necesita ser reevaluada.
¿Cuándo es demasiado el polimorfismo? En cualquier lugar que una condición se evalúa exactamente una vez para estar seguro. El umbral puede ser mayor cuando considera la cantidad de código que debe invertirse.