Mi actitud hacia la configuración? Con demasiada frecuencia, se hace de manera deficiente y con demasiada informalidad, lo que aumenta el TCO a medida que los usuarios intentan conseguir cientos de valores configurables. Agregue configurabilidad (codificación suave) solo cuando se demuestre que es necesario.
Cuando es necesario ... Un valor configurable debe tratarse con la misma desconfianza que la entrada del usuario y proporcionar mensajes de error lúcidos cuando la entrada es incorrecta.La mayoría de los componentes deben aislarse de la infraestructura de configuración, al igual que aislar la mayoría de los componentes de cualquier infraestructura de acceso a datos. Una vez aislado de la infraestructura de configuración, puede y debe probar cómo el componente maneja varias "entradas" desde el sistema de configuración. Lo más importante, el programa debería funcionar bien con un mínimo absoluto de configuración.
Sin embargo, este tipo de anti-patrón es muy común:?.
File.Open(configuration["widgetsFileStorage"] + "/" + widgetImage)
O esto (¿Alguna vez poner la entrada del usuario directamente en un href yo no De alguna manera, mucha gente confía en los valores de configuración ahora demasiado).
LinkWriter.href=configuration["supportUrl"]
Al configurar? Como demuestras que necesitas hacerlo. Una buena separación de preocupaciones facilitará la configuración de un valor en un momento posterior. Dejaría la responsabilidad de ubicar un archivo en un localizador de archivos.
File.Open(new WidgetFileLocater().GetUncPath(widgetImage))
En algún lugar detrás de mi localizador de archivos podría o no referirme a un archivo de configuración, una base de datos. Probablemente empiece a codificar de manera dura en un directorio de "imágenes" en el directorio de la aplicación. La configuración viene cuando tenemos un caso de uso para la flexibilidad (¿alguien quiere ponerlo en SAN?) Pero no antes. De todos modos, la mayor parte de la aplicación no debería estar configurada o no. Probablemente usaría alguna inyección de dependencia en el localizador de archivos para verificar que manejaba correctamente la entrada incorrecta del archivo de configuración.
También: La configuración casi siempre está vagamente tipada, no compilada y, por lo tanto, es mucho más peligrosa que el código. Este riesgo rara vez es respetado por los desarrolladores (pero muy respetado por los administradores de sistemas). He debatido sobre el uso de un lenguaje de script como python/ironpython/boo para las necesidades de configuración. Tendría la capacidad de cambiar cosas después de la compilación, con una sintaxis y verificación de tipos mucho más libre que xml o texto.
Advertencias: Mi actitud asume un ciclo de lanzamiento iterativo. Si tiene un ciclo de lanzamiento de 2 a 10 años, como Microsoft, querrá inclinarse a favor de configurar muchos más valores.
En algunos entornos corporativos, sé que las personas codifican su código de forma deliberada para mantener el trabajo a largo plazo. – Jeff
Etiqueta subjetiva añadida –
¡Y yo estaba pensando que el tema significaba una codificación difícil! – SteveL