Digamos que tengo una clase llamada PermissionManager que solo debería existir una vez para mi sistema y básicamente cumple la función de administrar varios permisos para varias acciones en mi aplicación. Ahora tengo una clase en mi aplicación que necesita poder verificar un cierto permiso en uno de sus métodos. El constructor de esta clase es actualmente público, es decir, utilizado por los usuarios de la API.Pregunta práctica de Singleton & Dependen Injection
Hasta hace un par de semanas, tendría que simplemente tenía mi clase de llamar al siguiente pseudo-código en algún lugar:
PermissionManager.getInstance().isReadPermissionEnabled(this)
Pero ya que he notado aquí todos odiando únicos + este tipo de acoplamiento, que estaba preguntándome cuál sería la mejor solución, ya que los argumentos que he leído contra los singleton parecen tener sentido (no comprobables, de acoplamiento alto, etc.).
¿Debo exigir realmente a los usuarios de API que pasen una instancia de PermissionManager en el constructor de la clase? Aunque solo quiero una instancia de PermissionManager para mi aplicación.
¿O estoy haciendo todo mal y debería tener un constructor no público y una fábrica en algún lugar que me transfiera la instancia de PermissionManager?
Otros detalles Tenga en cuenta que cuando digo "inyección de dependencias", estoy hablando de la DI Pattern ... No estoy usando cualquier marco DI como Guice o primavera. (... todavía)
El punto sobre la inyección a través de una interfaz es muy importante. La capacidad de burlarse del objeto PermissionManager en las pruebas es lo que hace que DI sea un enfoque poderoso para obtener códigos más comprobables. –
¿Qué ocurre si PermissionManager tiene una dependencia? ¿Hay una manera menos extraña que PermissionManager.getInstance (Foo)? ? –