Estoy trabajando en algún software en ese momento y no estoy seguro de qué ruta tomar con esto. Tengo algunos datos para almacenar en algún lugar en un dispositivo móvil. Los datos nunca cambiarán, y tienen una relación jerárquica, y se usarán para llenar la pantalla. Hay una cantidad razonable de estos datos.
Tengo las siguientes opciones:
- Un conjunto de enumeraciones / objetos
- Un archivo XML
- La base de datos SQLite incrustada
En este caso en particular, creo que la opción de enumeración es la que menos trabajo, pero me huelen los datos que se incrustan en el código de esa manera.
Creo que el archivo XML tiene más sentido, pero analizarlo será un éxito de recursos que parece un desperdicio ya que 'nunca' cambiará.
La base de datos debería proporcionar un impacto menor en el rendimiento, pero parece excesivo para los datos estáticos.
¿Cuál es la ruta de diseño correcta aquí?
Nota: Por "Nunca" cambio quiero decir que rara vez cambiará. Los datos en cuestión son un modelo de un conjunto de estándares gubernamentales, por lo que bien pueden cambiar en algún momento en el futuro, pero no será regular y tampoco actualizará automáticamente nuestro software, ya que un cambio en los estándares podría desencadenar un cambio en nuestros requisitos.
Respuestas:
Yo usaría un objeto para esto.
Dijiste que los datos nunca cambiarán, por lo que puedes almacenarlos fácilmente en la aplicación. La base de datos sería exagerada y aumentaría el tamaño.
El archivo XML también sería un poco excesivo y también aumenta el tamaño.
Entonces, en mi opinión, la mejor opción sería una enumeración u objeto.
fuente
¿Nunca cambiará o cambiará? Esa es la pregunta que realmente tiene que responder antes de obtener una buena respuesta.
Los datos estáticos que nunca cambian (por ejemplo, nombres de días de la semana) son buenos para ir en código;
Los datos que prácticamente nunca cambian (por ejemplo, el nombre de su servidor DNS) también son buenos para ir en código, si es necesario cambiar, es tan raro que una actualización de código está bien.
Los datos que no cambian, pero que pueden (por ejemplo, un retraso de tiempo entre actualizaciones periódicas) probablemente sean mejores en una ubicación que se pueda cambiar fácilmente, como un almacén de configuración local (sqlite o xml, no hace una diferencia real)
El almacenamiento es poco preocupante: si nunca o casi nunca cambia, puede leerlo todo al inicio del programa y almacenarlo en caché como datos del programa. Si, en el improbable caso de que alguna vez necesite cambiar, un reinicio de la aplicación no es tan importante.
fuente
Por lo general, las cosas que "nunca cambian" son las primeras en cambiar ...
Ya sea que use una base de datos o algún otro sistema externo (como un archivo de configuración) importa poco, siempre que pueda accederse fácil y rápidamente cuando sea necesario.
Tiendo a usar una tabla de base de datos si ya tengo una base de datos de todos modos, y tiene sentido (digamos que los datos posiblemente deben ser cambiados por personas que no tienen acceso al sistema de archivos en el servidor en el que se implementa la aplicación, o se ejecuta en varias máquinas y la configuración debe mantenerse sincronizada entre ellos).
Por supuesto, una base de datos no puede contener todo. Las credenciales de la base de datos, por ejemplo, deberán almacenarse en otro lugar, probablemente un archivo de configuración.
fuente
La pregunta para preguntar por cualquier dato no es si cambiará; probablemente no lo sepas, e incluso si lo supieras, la respuesta probablemente sería engañosa.
La pregunta que debe hacerse es, cuando cambia, quién debería cambiarla:
El martes generalmente debería ser una enumeración, no porque nunca pueda cambiar. Pero porque si un dictador loco se hizo cargo y exigió que el martes llevara su nombre, usted como autor del software tendrá que cambiarlo (o ser alimentado por los tiburones).
No querrás que todos tus usuarios tengan que buscar en los archivos de configuración u oscurecer las tablas de la base de datos para evitar ese destino ...
fuente
Existe la posibilidad de que "sus" datos necesiten cambiar a pesar de que las entidades que los datos representan en el mundo real pueden no tener Debe decidir si vale la pena incluir un archivo de texto separado de algún tipo que pueda actualizarse sin actualizar toda la aplicación.
Ejemplos:
Cualquier otro tipo de cambio en la estructura de datos probablemente necesitará una actualización de la aplicación, por lo que no es un beneficio.
fuente
Originalmente escribí esta respuesta para esta pregunta en stackoverflow , pero creo que la misma respuesta también se aplica a esta pregunta.
Hay un artículo de Mathias Verraes que habla sobre su problema aquí . Habla sobre la separación de objetos de valor en el modelo de conceptos que sirven a la interfaz de usuario.
Citando el artículo cuando se le preguntó si modelar países como entidades u objetos de valor:
Sugirió un enfoque diferente para introducir un nuevo concepto llamado
AvailableCountry
:Parece que hay una tercera solución que consiste en modelar tablas de búsqueda como objetos de valor y entidades.
Por cierto, asegúrese de consultar la sección de comentarios para algunas discusiones serias sobre el artículo.
fuente
Cosas para considerar:
¿Qué tan estáticos son los datos? Si nunca cambia, entonces debería vivir en el objeto. Para cambiar los datos, es posible que deba volver a compilar y volver a implementar. ¿Está contento con hacer una redistribución para un cambio menor?
Si es una aplicación web y la tiene como parte de web.config, ¿está contento con el reinicio de la aplicación cuando realiza cambios en esos datos?
Si lo coloca en una base de datos, siempre puede almacenarlo en caché en el lado del cliente (aplicación de escritorio) o del lado del servidor (servicio o sitio web). La base de datos podría ser una buena solución de la OMI.
fuente