Tengo una clase que gestiona las preferencias del usuario para un gran proyecto de software. Cualquier clase en el proyecto que pueda necesitar establecer o recuperar una preferencia del usuario de una tienda persistente es llamar a los métodos estáticos en esta clase. Esta gestión centralizada permite que las preferencias se eliminen por completo mediante programación, lo que sería imposible si cada pref se manejara cerca de su código de uso, rociado a lo largo del proyecto.¿Es una buena idea una clase de "preferencias maestras"?
Me encontré con otra implicación del diseño de centralización en el curso de esto. El software tiene una API pública. Esa API se puede proporcionar sola en un jar. Las clases en esa API pueden referirse a la clase de gestión de pref. Por lo tanto, el administrador de pref debe ir en el jar API.
Cada preferencia puede tener un valor predeterminado. Tras el inicio del software, ese valor predeterminado puede ser calculado. El algoritmo depende de la preferencia y, por lo tanto, tiende a residir cerca del código de uso. Entonces, si el administrador de preferencias necesita encontrar un valor predeterminado, llama a la clase en cuestión.
Pero ahora ese administrador pref se ha convertido en una "clase de pulpo", absorbiendo todo tipo de clases en el contenedor API que no deberían estar allí. Si no es así, los programas que usan el jar API rápidamente se ejecutan en excepciones de ClassDef. Si lo hace, entonces el contenedor API está ahora hinchado, ya que cada una de esas otras clases puede referirse a otras más.
En general, ¿otros programadores de Java administran sus preferencias con una clase centralizada?
¿Tiene sentido distribuir esa clase de gestión de preferencias estáticas como parte de una API pública?
¿Debería ese administrador pref el guardián del código para determinar los valores predeterminados?
Wow; gran respuesta. Tengo algunas pequeñas objeciones con un 10%, pero la partición de las preferencias relacionadas fue una buena decisión, y una que debería haber pensado. –
A menudo me enfrento al mismo problema (aunque afortunadamente Eclipse no me da muchas opciones), me interesaría escuchar tus argucias :) – Uri
En cuanto a obtener una instancia de administrador compartido, no estaba realmente preocupado por ningún bloqueo excepto en el nivel de escritura del disco (que maneja Java), pero por supuesto hay un nivel más alto de abstracción, me doy cuenta de que también debería preocuparme. –