¿Existen ventajas en la codificación de valores de datos en un programa?

12

Soy un programador autodidacta y para principiantes, así que me disculpo si no me meto en la jerga del programador.

Estoy trabajando en un proyecto en el que estoy proporcionando datos, que se actualizarán continuamente, para desarrolladores que esencialmente crearán una herramienta para generar informes a partir de consultas sobre los datos.

Parece que todas las personas involucradas creen que necesitan codificar los valores de los datos (no el esquema, sino los propios dominios / valores) en el programa de generación de informes.

Por ejemplo, supongamos que estábamos informando sobre el personal; el informe se dividiría en categorías, con un encabezado para cada departamento, y luego, bajo cada encabezado de 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 puestos de trabajo. Por otro lado, creo que podrían / podrían consultar esas cosas en tiempo de ejecución, ordenar los registros por ellos y generar encabezados de informes de forma dinámica en función de los valores que existen.

Dado que la lista de valores potenciales cambiará con el tiempo (por ejemplo, los departamentos se crearán o cambiarán de nombre, 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 un desarrollador, me pregunto qué me falta. ¿Qué ventajas podrían tener los valores de codificación rígida en una herramienta como esta? ¿Es así como se diseñan los programas?

    
pregunta Tom 09.08.2016 - 20:09

4 respuestas

9

Wikipedia:

  

La codificación física (también codificación física o codificación física) se refiere al software   práctica de desarrollo de incrustar lo que puede, tal vez sólo en   En retrospectiva, se considerará una entrada o datos de configuración directamente en   el código fuente de un programa u otro objeto ejecutable, o fijo   formateo de los datos, en lugar de obtener esos datos de fuentes externas   Fuentes o generar datos o formatear en el propio programa con   la entrada dada.

La codificación fija se considera un antipattern.

  

Considerada una codificación rígida antipatrón, requiere la fuente del programa   El código se modificará cada vez que cambien los datos de entrada o el formato deseado,   cuando podría ser más conveniente para el usuario final cambiar los detalles   por algún medio fuera del programa.

A veces no puedes evitarlo, pero debería ser temporal.

  

A menudo se requiere codificación dura. Los programadores pueden no tener un usuario dinámico   La solución de interfaz para el usuario final funcionó pero aún debe entregar   La característica o el lanzamiento del programa. Esto suele ser temporal pero hace   resolver, en un sentido a corto plazo, la presión para entregar el código.   Más tarde, se realiza una codificación de software para permitir que un usuario pase parámetros que   Proporcione al usuario final una forma de modificar los resultados o el resultado.

  • La codificación de los mensajes dificulta la internacionalización de un programa.
  • Las rutas de codificación no facilitan la adaptación a otra ubicación.

La única ventaja de la codificación es la entrega rápida de código.

    
respondido por el Tulains Córdova 09.08.2016 - 21:38
23

¿De verdad? ¿No hay posibles casos de uso válidos?

Aunque estoy de acuerdo en que codificación dura es generalmente una anti-patrón o al menos un olor de código muy malo, existe Hay muchos casos en los que tiene sentido:

  • simplicidad ( YAGNI ),
  • la entrada es realmente constante y nunca cambiará (es decir, representa una constante natural o comercial o una aproximación de una. por ejemplo, 0, PI, ...),
  • software integrado (las limitaciones de memoria y asignación vienen a la mente),
  • software seguro (estos valores no están disponibles y / o son fáciles de descifrar o de ingeniería inversa, por ejemplo, fichas y sales criptográficas),
  • código generado (su preprocesador o generador es configurable, pero escupe código con valores codificados),
  • y probablemente algunos más.

¿Aún eres un Anti-Pattern ? ¡Así es Over-Engineering ! ¡Se trata de la esperanza de vida de tu software!

No es que esté diciendo que hay razones muy buenas, y en general me resistiría a los valores codificados. Pero algunos pueden obtener fácilmente un pase por razones válidas.

Y no supervise el primero con respecto a la simplicidad / YAGNI tampoco porque piense que es trivial: probablemente no haya razón para implemente un analizador loco y un comprobador de valor para un script simple que hace muy bien un trabajo para un caso de uso limitado.

Es difícil encontrar el equilibrio. A veces no se prevé que un software crezca y dure más que el simple script que comenzó. A menudo, sin embargo, es al revés: hacemos un trabajo de ingeniería excesiva, 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 temprano no necesitaba.

Eso es lo malo de los Anti-Patrones: están presentes en ambos extremos del espectro, y su apariencia depende de la sensibilidad de la persona que revisa su código.

    
respondido por el haylem 09.08.2016 - 22:08
5

Hay veces en que es bueno codificar los valores. Por ejemplo, hay algunos números como 0, o uno o varios valores n ^ 2-1 para máscaras de bits que deben ser ciertos valores con fines algorítmicos. Permitir tales valores a lo configurable 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 dio, no veo dónde sería útil la codificación rígida. Todo lo que mencione 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í.

    
respondido por el JimmyJames 09.08.2016 - 21:53
-1

Implementar una solución robusta que permita que los usuarios finales configuren valores que de otra forma podrían haber sido codificados de forma rígida exige una validación sólida de esos valores. ¿Pusieron en una cadena vacía? ¿Pusieron en 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 permanente sea siempre, o incluso a menudo, una buena idea. Este es solo uno de los factores a tener en cuenta.

    
respondido por el Topher Eliot 11.08.2016 - 20:48

Lea otras preguntas en las etiquetas