¿Cuáles son las ventajas y desventajas de utilizar un Localizador de servicios en comparación con un singleton? He leído que los singletons son malos, pero me pregunto si el Service Locator sería en general una mejor forma de hacer las cosas.Singleton Vs ServiceLocator
6
A
Respuesta
9
Ambos enfoques son malos en cuanto a que no es obvio desde el contrato de clase cuáles son sus 'dependencias'. Es decir,
private void foo()
{
var x = SomeSingleton.Instance.GetX();
var y = ServiceLocator.GetService<IProvider>().GetY();
}
tiene referencias a SomeSingleton
y IProvider
profundamente enterrado en algún lugar dentro.
Sin embargo, en comparación con el enfoque de Singleton pura, localizadores de servicios son por lo general mucho mejor en cuanto a que permiten una configuración más sencilla centralizada, gestión de vida, etc. También permiten una mejor capacidad de prueba (siempre que pueda llamadas simuladas a GetService<T>
), de acoplamiento inferior , separación de preocupaciones, etc.
0
si la capacidad de prueba es una preocupación, el uso del localizador de servicios es mucho mejor que los singleton puros.
Cuestiones relacionadas
- 1. Pruebas unitarias con ServiceLocator
- 2. Session vs singleton pattern
- 3. Singleton vs Intents (Android)
- 4. C++, static vs. namespace vs. singleton
- 5. métodos estáticos C++ Singleton Vs
- 6. clase estática vs clase singleton
- 7. PHP: Singleton vs clase estática
- 8. Patrón de diseño singleton vs Singleton beans en contenedor Spring
- 9. Android: ¿Cuándo usar Service vs Singleton?
- 10. C++ singleton vs. objeto estático global
- 11. Java Singleton vs static: ¿hay un beneficio de rendimiento real?
- 12. Cuándo utilizar Singleton vs Transient vs Request utilizando Ninject y MongoDB
- 13. jQuery Singleton
- 14. Patrón Singleton
- 15. Singleton Destructors
- 16. Clases singleton
- 17. Singleton Properties
- 18. inicializando ruby singleton
- 19. ¿Servlet es el singleton?
- 20. clase Singleton en java
- 21. Singleton con multiprocesadores
- 22. OnSaveInstanceState con Singleton
- 23. Java singleton con herencia
- 24. Singleton o no
- 25. Singleton en ExtJs4
- 26. IEqualityComparer y singleton
- 27. @Singleton en Java EJB
- 28. Singleton La eliminación
- 29. java singleton instanciation
- 30. PHP Singleton DOP
Iría tan lejos como para considerar ambos antipatrones, pero estoy de acuerdo en que Service Locator es marginalmente preferible. La mejor solución sería implementar una Inyección de Dependencia adecuada. –
por lo que entiendo por DI, ¿no requeriría que todos los objetos que solían acceder al singleton directamente tengan una referencia al objeto ex singleton? – djcouchycouch
Sí, debe darles como parámetros al constructor (si usa la inyección de constructor, esto se conoce generalmente como "Declarar sus dependencias"). Para facilitar un poco las cosas, puede usar los contenedores de Inversión de control. Eche un vistazo a Google Guice. –