2010-02-23 21 views
6

Necesito permitir que el usuario almacene/cargue un número arbitrario de listas de objetos (suponiendo que sean serializables). Conceptualmente Quiero un modelo de datos comojava: API de preferencias frente a la configuración Apache Commons

class FooBean { /* bean stuff here */ } 

class FooList { 
    final private Set<FooBean> items = new HashSet<FooBean>(); 

    public boolean add(FooBean item) { return items.add(item); } 
    public boolean remove(FooBean item) { return items.remove(item); } 
    public Collection<FooBean> getItems() { 
     return Collections.unmodifiableSet(items); 
    } 
} 

class FooStore { 
    public FooStore() { 
     /* something... uses Preferences or Commons Configuration */ 
    } 
    public FooList load(String key) { 
     /* something... retrieves a FooList associated with the key */ 
    } 
    public void store(String key, FooList items) { 
     /* something... saves a FooList under the given key */ 
    } 
} 

¿Debo usar el Preferences API o Commons Config? ¿Cuáles son las ventajas de cada uno?

Respuesta

1

Normalmente iría con la API de Preferencias que es parte de JDK a menos que haya problemas que sean resueltos por commons-config.

Personalmente cuando uso la primavera tiene un Configurador de propiedades que hace la mayoría de estos para mí.

6

Bueno, commons-configuration es, como muchos de los proyectos de apache, una capa de abstracción que le permite a uno usar las preferencias, una tienda ldap, archivos de propiedades, etc. Entonces, su pregunta podría reescribirse como está: ¿Necesitará cambiar el formato que usa para almacenar sus preferencias? Si no, las preferencias de Java son el camino a seguir. En otro lugar, considere la portabilidad de la configuración de los comunes.

2

dado tu ejemplo de almacenar un conjunto de valores asociados con una tecla que parecen tener las siguientes opciones cuando usa cada biblioteca

  • Preferencias - tienda como una matriz de bytes asociado con la tecla
  • Commons Configuración: almacenar como una lista de cadenas asociadas con una clave

Por lo tanto, la elección podría ser si es más fácil convertir un FooBean en una matriz de bytes o una Cadena.

La otra ventaja de la configuración de Commons es los diferentes backends. Lo he usado para almacenar propiedades en una base de datos. Si desea almacenar los objetos en algún lugar que no sea el equipo local de los usuarios, sería la mejor opción.

1

La configuración de Commons no es adecuada para almacenar estructuras de objetos complejos. Será mejor que uses un marco de serialización.

Cuestiones relacionadas