Soy un programador autodidacta, novato, por lo que me disculpo si no clavo la jerga del programador.
Estoy trabajando en un proyecto en el que proporciono datos, que se actualizarán continuamente, a desarrolladores que esencialmente crearán una herramienta para generar informes a partir de consultas sobre los datos.
Parece que todos los involucrados piensan que necesitan codificar los valores de los datos (no el esquema, sino los dominios / valores mismos) en el programa de generación de informes.
Por ejemplo, supongamos que estamos informando sobre el personal; el informe se dividiría en categorías, con un encabezado para cada departamento, y luego debajo de cada encabezado del departamento habrá subtítulos de títulos de trabajo, y luego debajo de cada subtítulo habrá una lista de empleados. Los desarrolladores quieren codificar los departamentos y los títulos de trabajo. Por otro lado, pensaría que podrían / consultarían esas cosas en tiempo de ejecución, ordenarían los registros por ellos y generarían encabezados de informes dinámicamente en función de los valores que hay.
Dado que la lista de valores potenciales cambiará con el tiempo (por ejemplo, se crearán / renombrarán departamentos, se agregarán nuevos títulos de trabajo), el código deberá actualizarse continuamente. Me parece que podríamos omitir los pasos de mantenimiento del código y organizar dinámicamente los informes.
Como no soy desarrollador, me pregunto qué me estoy perdiendo. ¿Qué ventajas podría tener codificar valores en una herramienta como esta? ¿Es así típicamente cómo se diseñan los programas?
Respuestas:
Wikipedia:
La codificación dura se considera un antipatrón.
A veces no puedes evitarlo, pero debería ser temporal.
La única ventaja de la codificación rígida parece ser la entrega rápida de código.
fuente
De Verdad? ¿No hay posibles casos de uso válidos?
Si bien estoy de acuerdo en que la codificación dura es generalmente un antipatrón o al menos un mal olor a código , hay muchos casos en los que tiene sentido:
¿Sigue siendo un antipatrón ? ¡Así es la sobre ingeniería ! ¡Se trata de la esperanza de vida de su software!
No es que esté diciendo que hay grandes razones, y en general me opondría a valores codificados. Pero algunos pueden obtener un pase fácilmente por razones válidas.
Y tampoco supervise el primero con respecto a la simplicidad / YAGNI pensando que es trivial: probablemente no haya razón para implementar un analizador loco y un verificador de valores para un script simple que haga un trabajo para un caso de uso limitado muy bien.
Es difícil encontrar el equilibrio. A veces no se prevé que un software crecerá y durará más que el simple script que comenzó. Sin embargo, a menudo es al revés: hacemos un diseño excesivo de las cosas y un proyecto se archiva más rápido de lo que puede leer el Programador pragmático. Perdiste tiempo y esfuerzo en cosas que un prototipo inicial no necesitaba.
Eso es lo malo de los antipatrones: están presentes en ambos extremos del espectro, y su apariencia depende de la sensibilidad de la persona que revisa su código.
fuente
Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']
. También sería mucho más difícil mantener la matriz codificada en caso de que se introdujera un nuevo Departamento o Título.Hay veces que está bien codificar valores. Por ejemplo, hay algunos números como 0, o uno o varios valores n ^ 2-1 para máscaras de bits que necesitan ser ciertos valores para fines algorítmicos. Permitir que tales valores sean configurables no tiene valor y solo abre la posibilidad de problemas. En otras palabras, si cambiar un valor solo rompería las cosas, probablemente debería estar codificado.
En el ejemplo que diste, no veo dónde sería útil la codificación rígida. Todo lo que menciona ya debería estar en la base de datos, incluidos los encabezados. Incluso las cosas que impulsan la presentación (como el orden de clasificación) se pueden agregar si no están allí.
fuente
La implementación de una solución robusta que permita valores que de otro modo habrían sido codificados para que los usuarios finales puedan configurarlos, exige una validación sólida de esos valores. ¿Pusieron una cuerda vacía? ¿Pusieron algo no numérico donde debería haber sido un número? ¿Están haciendo inyección SQL? Etc.
La codificación rígida evita muchos de estos riesgos.
Lo que no quiere decir que la codificación dura sea siempre, o incluso a menudo, una buena idea. Este es solo uno de los factores a tener en cuenta.
fuente