2011-08-23 29 views
5

Tengo una aplicación que tiene algunas clases que manejan algunas funciones específicas, tienen una duración igual a la aplicación en sí, y están destinadas a ser utilizadas en muchas partes del programa. Por esta última razón, los llamo Servicios. Por ejemplo, el servicio de audio reproduce archivos de audio y hace muchas otras cosas relacionadas con el audio.clases singleton/estáticas para servicios

Estas clases se instancian solo una vez al inicio de las aplicaciones y no tiene sentido tener más de una por tipo.

Como he leído muchas respuestas sobre singleton aquí en SO, donde se desaconseja su uso, continué pasando una referencia a estos servicios cuando sea necesario. Como el proyecto está creciendo, me encuentro con muchas clases que necesitan una referencia de servicio en su constructor y en algunos casos incluso una fachada a esos servicios para evitar agregar todas las referencias de servicios.

Creo que lo estoy haciendo mal. Creo que este debería ser un buen uso para las clases estáticas/singleton.

¿Es este un enfoque correcto?

Respuesta

1

Veo una respuesta que sugiere la introducción de Spring. Bajo las sábanas, Spring todavía está pasando esa referencia alrededor de donde se necesita.

En lugar de introducir un nuevo marco en la aplicación, ¿por qué no simplemente usar un Singleton? Si hace el trabajo y es más fácil de mantener que pasar una referencia de servicio, yo digo que la use.

Si su preocupación acerca de Singletons se debe a su impacto en la capacidad de prueba, use Dependency Injection (el patrón, no un marco) para disminuir el acoplamiento a una implementación.

2

Parece que necesita un contenedor de inyección de dependencia con algunas capacidades de autoencendido. En caso de que esté utilizando Java, considere Spring por ejemplo.

0

Singleton en realidad representa los objetos que deben crearse solo una vez solo durante el ciclo de vida de la aplicación. Estos objetos en realidad contienen algunas de las configuraciones fijas. Digamos que tienes una clase de analizador que es para analizar solo html. La raíz de HTML debe ser la etiqueta "". Además, no desea crear montones de instancias de esta clase de analizador porque cada instancia de clase hará lo mismo. Instance obtendrá una cadena de html y te devolverá X. Si crees que tus clases solo harán una cosa a la vez, puedes elegir Singleton. Sin embargo, si dices que, por ejemplo, tu servicio de audio debería reproducir audios diferentes a la vez, CREO que crear una instancia de una clase es mejor que hacerlo solo.

0

Estoy de acuerdo con MikeG. Use un singleton Como dice que estas clases están orientadas principalmente al servicio, no esperaría que causara ningún problema.

Cuestiones relacionadas