Localizador de servicios
La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la
versión revisada el 21 de octubre de 2017; las comprobaciones requieren
9 ediciones .
Un localizador de servicios es un patrón de diseño utilizado en el desarrollo de software para encapsular los procesos involucrados en la obtención de un servicio con una fuerte capa de abstracción . Este patrón utiliza un registro central conocido como "localizador de servicios" que, cuando se solicita, devuelve la información (generalmente objetos ) necesaria para realizar una tarea específica [1] . Vale la pena señalar que, en algunos casos, el localizador de servicios es en realidad un antipatrón [2] [3] .
Beneficios
- Un "localizador de servicios" puede actuar como un simple enlazador de tiempo de ejecución . Esto le permite controlar el código del programa en tiempo de ejecución sin volver a compilar la aplicación y, en algunos casos, sin tener que reiniciarla.
- Las aplicaciones pueden optimizarse en tiempo de ejecución agregando y eliminando elementos del localizador de servicios de forma selectiva. Por ejemplo, una aplicación puede descubrir que tiene una mejor biblioteca para leer imágenes JPG disponibles que la predeterminada y modificar el registro en consecuencia.
- Los componentes de la aplicación o las bibliotecas utilizadas en una aplicación se pueden separar por completo . La única relación entre ellos se hace constar en el registro.
Desventajas
- Las relaciones entre los componentes de la aplicación ubicados en el registro ocultan las dependencias de partes del programa (hacen que no sean obvias) y aumentan la complejidad del sistema. Esto hace que sea más difícil encontrar errores en la aplicación y puede hacer que el sistema en general sea menos confiable.
- El registro debe ser único, lo que puede convertirse en un cuello de botella para ejecutar varias copias de la aplicación al mismo tiempo.
- El registro puede ser una vulnerabilidad de seguridad grave porque permite que personas externas (incluidos los atacantes) inyecten código en una aplicación.
- El registro oculta las dependencias de clase que causan errores de tiempo de ejecución, en lugar de errores en tiempo de compilación, cuando el compilador informa de un error en ausencia de las dependencias necesarias.
- El registro hace que el código sea más difícil de mantener (en comparación con el uso de inyección de dependencia ) porque se vuelve oscuro cuando realiza una entrada de registro errónea o se pierde una entrada necesaria.
- El registro hace que el código sea más difícil de probar , ya que todas las pruebas deben interactuar con la misma clase de localizador de servicios globales para poder instalar dependencias falsas de la clase bajo prueba. Sin embargo, esto se supera fácilmente mediante la inyección de clases de aplicación con una única interfaz de localización de servicios.
Véase también
Notas
- ↑ Inversión de Contenedores de Control y el patrón de Inyección de Dependencia . Consultado el 21 de octubre de 2017. Archivado desde el original el 30 de mayo de 2020. (indefinido)
- ↑ Seemann, Mark Service Locator es un antipatrón . blog.ploeh.dk . Consultado el 1 de junio de 2017. Archivado desde el original el 31 de mayo de 2017.
- ↑ Hall, GML Adaptive Code a través de C#: Codificación ágil con patrones de diseño y principios SOLID. - Pearson Education, 2014. - ISBN 9780133979732 .
Enlaces