Soy un gran creyente de diseñar para el problema en cuestión y no soplar su diseño al tratar de adivinar todos los casos que tiene que atender porque "algún día podríamos necesitarlo".
Básicamente, dada una lista de requisitos específicos, el diseño contra eso, sin embargo, esto no significa que no debas:
- haga que los aspectos de su diseño sean configurables en lugar de codificarlos en su solución. Ya sea a través de parámetros pasados en tiempo de ejecución o mediante una configuración externa leída al inicio (o después de HUP'ing).
- ate su código con números mágicos,
- evite echar un vistazo para ver si ya hay algo escrito que pueda reutilizar, tal vez después de adaptar la solución existente para proporcionar un enfoque adecuado para la situación existente, así como para los nuevos requisitos.
El principal problema con el diseño de "futuros posibles" es que siempre estás adivinando. Posiblemente haciendo conjeturas educadas, pero "cuando se trata de empujar" sigue siendo solo una serie de conjeturas.
Al hacer esto, también tiene la posibilidad muy real de exprimir su solución para que se ajuste a los casos generales en lugar de resolver el problema específico en cuestión según lo definido por sus requisitos conocidos.
¿Qué dice eso? "Cuando todo lo que tienes es un martillo, todo comienza a parecerse a un clavo".
Desearía tener una libra por cada vez que escuche a alguien decir: "Pero es una solución más adaptable para esos casos generales que podríamos ver en el futuro".