2010-03-31 11 views
12

Estoy usando C# .NET.¿La mejor manera de proporcionar configuraciones de software?

En mi software proporciono un cuadro de diálogo de configuración a través del cual el usuario puede establecer la configuración de la aplicación que quiero guardar en un archivo.

Requisitos (típico):

  1. Cada clase I definida usa alguna parte de estos ajustes. Entonces, estos deberían ser globales para todas las clases.
  2. Deben cargarse mientras se inicia el software.
  3. Cuando el usuario cambia la configuración y hace clic en 'guardar'/'aplicar'. La configuración actual debería cambiar.

Me pregunto cuál es la mejor manera de hacerlo? Además, ¿cuál es la mejor manera de guardar estas configuraciones en el disco? Me refiero a si debería crear un objeto de clase Settings y serializarlo en 'settings.dat' o proporcionar un archivo estructurado como XML/JSON

Esto es necesario para casi cualquier otro software. Entonces, ¿no hay ningún patrón de diseño para esto?

EDIT:

Bueno, eso es algo que yo no sabía. Es agradable :). Pero supongamos que mientras el usuario utiliza el software en el medio, cambia la configuración y luego todos los demás objetos que están usando estas Propiedades globales. La configuración. La predeterminada. * Debe modificarse. ¿Hay algún tipo de mecanismo de notificación? ¿Algún tipo de evento?

Respuesta

7

La clase de configuración que viene con .Net es muy útil, y la utilizo para la mayoría de mis proyectos. Lo que hay que tener en cuenta es que cada nueva versión de la aplicación tiene su propio archivo de configuración, así que asegúrese de tener valores predeterminados detectables. Todas las configuraciones desaparecerán cada vez que se distribuya un nuevo EXE.

El estado global es muy difícil de tratar correctamente, por lo que generalmente paso las configuraciones relevantes a los diversos objetos en sus constructores, o en las propiedades. Y generalmente no aplico cambios de configuración a esos objetos, ya que, en muchos casos, es muy difícil para un objeto lidiar con una configuración cambiante de forma inteligente. Por el contrario, solo uso la nueva configuración para los nuevos objetos a medida que se crean. Si una configuración debe aplicarse inmediatamente, entonces simplemente vuelco el objeto viejo y creo uno nuevo. Solo depende de los detalles de la aplicación.

Si tiene un botón Aplicar en la pantalla de configuración, le recomiendo volver a cargar y mostrar todos los valores después de guardarlos. De esta forma, la pantalla seguramente contendrá exactamente lo que se guardó realmente. Esto podría ser importante si se analiza alguna configuración. He tenido usuarios que ingresan una combinación de mes y día en un campo en particular, y el formato que usaron era diferente de lo esperado, por lo que el valor guardado fue incorrecto. Al actualizar la pantalla después de Aplicar, este tipo de errores pueden hacerse obvios.

Espero que esto ayude!

+1

Puede utilice el método de actualización (http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.upgrade.aspx) para mover la configuración de la versión anterior a la más nueva. Solo asegúrate de llamarlo solo una vez. – Giorgi

+0

@Giorgi - ¡Interesante! Tendré que intentarlo. –

+0

Agregue este enlace http://msdn.microsoft.com/en-us/library/aa730869%28VS.80%29.aspx a su respuesta y también edite su respuesta según el comentario de Giorgi. Para que pueda aceptarlo como una respuesta. – claws

13

. Los proyectos de .Net ya tienen la noción de Configuración, con alcance tanto para el usuario como para la aplicación, que cumplirá con todos sus requisitos anteriores. Hay clases para leer y escribir las configuraciones. Recomiendo encarecidamente que los mires en lugar de hacer algo tú mismo.

Using Settings in C#

puede utilizar la configuración en una variedad de tipos de proyectos, aunque en ciertos tipos de proyectos como proyectos de ASP.NET, configuración de nivel de usuario pueden no estar disponibles.

+1

@womp, la actualización entre diferentes versiones puede ser bastante complicada. – Giorgi

+0

Por supuesto, el control de versiones en general es complicado, y este es solo otro caso más. Sin embargo, esto debería ahorrarle al OP bastante tiempo en general. – womp

+0

¿dónde están almacenados estos ajustes? dentro del conjunto de ese proyecto (dll/exe)? o se almacenará en algún tipo de archivo settings.settings que debo implementar junto con mi software. – claws

3

Usted y womp los dos tienen razón:

debe crear una clase de ajustes que es una fachada sobre la configuración de .NET. De esta forma obtendrá lo mejor de ambos mundos: la capacidad de prueba de una solución enrollada a mano y la facilidad de implementación típicamente asociada con Microsoft Silver Bullets.

0

Yo personalmente iría a la ruta Properties.Settings. Agregue un archivo de Configuraciones a la carpeta Propiedades de su aplicación. Esto le permite agregar elementos fácilmente al archivo app.config de su aplicación. Existe una clase .net incorporada que puede usar para leer/escribir valores encontrados en el archivo de Configuraciones. A continuación, puede escribir una clase contenedora pequeña que encapsula esa funcionalidad o simplemente usar el .NET integrado en todo el lugar.

Personalmente crearía una clase singleton de hilos que usa la clase de contenedor pequeño sobre la construida en .net. Sí, es un trabajo extra, pero es una cantidad pequeña y te da un gran poder en tu aplicación por el poco trabajo.

Editar: Perdón olvidé incluir el enlace de configuración de MSDN.

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

0

Como otros han sugerido el uso de la función de configuración es el camino a seguir. La configuración también proporciona eventos cuando se actualizan para que pueda manejarlos y tomar las medidas necesarias. También puede usar el método Upgrade para mover la configuración de la versión anterior a la más nueva. Solo asegúrese de llamar solo una vez (probablemente desde el instalador).

La configuración también se puede limitar a los controles para que no tenga que mapearlos manualmente desde los controles a la configuración.

Cuestiones relacionadas