PROPÓSITO: ACLARAR CUÁLES SON LAS SIMILITUDES, Y SOBRE TODO LAS DIFERENCIAS ENTRE UN SERVICE, UNA FACTORY, Y UN PROVIDER. Y, POR SUPUESTO, BOSQUEJAR ALGUNAS "REGLAS" SOBRE CUÁL UTILIZAR EN QUÉ MOMENTO.
EL PROVIDER… EN REALIDAD ES UN SERVICE PROVIDER. LA FACTORY… EN REALIDAD ES UNA SERVICE FACTORY. Y EL SERVICE… EN REALIDAD ES UN SERVICE QUE LAMENTABLEMENTE SE LLAMA 'SERVICE'.
EN PALABRAS DE LOS PROPIOS DESARROLLADORES DE ANGULAR: “NOTE: YES, WE HAVE CALLED ONE OF OUR SERVICE RECIPES 'SERVICE'. WE REGRET THIS AND KNOW THAT WE'LL BE SOMEHOW PUNISHED FOR OUR MISDEED. IT'S LIKE WE NAMED ONE OF OUR OFFSPRING 'CHILD'. BOY, THAT WOULD MESS WITH THE TEACHERS.” “NOTA: SÍ, HEMOS LLAMADO UNO DE NUESTROS SERVICIOS 'SERVICIO'. LO LAMENTAMOS Y SABEMOS QUE SEREMOS CASTIGADOS DE ALGUNA MANERA POR NUESTRO DELITO. ES COMO SI HUBIÉRAMOS LLAMADO A UNO DE NUESTROS HIJOS 'NIÑO'. NIÑO, ESO SERÍA UN PROBLEMA CON LOS PROFESORES.” HTTPS://DOCS.ANGULARJS.ORG/GUIDE/PROVIDERS#SERVICE-RECIPE
UN SERVICIO DE ANGULAR ES UN SINGLETON CREADO POR UNA SERVICE FACTORY. ESTAS SERVICE FACTORIES SON FUNCIONES, QUE, EN SU MOMENTO, FUERON CREADAS POR UN SERVICE PROVIDER. LOS SERVICE PROVIDERS SON FUNCIONES CONSTRUCTORAS. CUANDO SON INICIADAS, DEBEN CONTENER UNA PROPIEDAD LLAMADA $GET. QUE CONTIENE A LA FUNCIÓN SERVICE FACTORY. CUANDO SE SOLICITA UN SERVICIO, EL $INJECTOR ES EL REPONSABLE DE ENCONTRAR EL SERVICE PROVIDER CORRECTO. INICIARLO Y LLAMAR SU MÉTODO $GET, EJECUTANDO LA FUNCIÓN SERVICE FACTORY PARA OBTENER LA INSTANCIA DEL SERVICIO.
TIENE VARIOS MÉTODOS PARA REGISTRAR COMPONENTES CON EL $INJECTOR. MUCHAS DE ESTAS FUNCIONES ESTÁN EXPUESTAS TAMBIÉN EN ANGULAR. MODULE. HOY NOS INTERESAN: - provider(nombre, provider) - factory(nombre, $get) - service(nombre, constructor)
LOS SERVICE PROVIDERS SON FUNCIONES CONSTRUCTORAS. CUANDO SON INICIADAS, DEBEN CONTENER UNA PROPIEDAD LLAMADA $GET. QUE CONTIENE A LA FUNCIÓN SERVICE FACTORY. //$provide.provider(name, provider); app.provider(name, provider); Registra un service provider con el $injector. DEFINICIÓN:
CARACTERÍSTICAS: SUS NOMBRES COMIENZAN CON EL NOMBRE DEL SERVICIO QUE PROVEEN SEGUIDO DE PROVIDER, POR EJEMPLO. EL PROVIDER DEL SERVICIO $ROUTE SE LLAMA $ROUTEPROVIDER. LOS OBJETOS SERVICE PROVIDER PUEDEN TENER MÉTODOS ADICIONALES QUE PERMITAN LA CONFIGURACIÓN DEL PROVIDER Y SU SERVICIO. PUEDES CONFIGURAR QUÉ TIPO DE SERVICIO ES CREADO POR EL MÉTODO $GET O CÓMO ESTE SERVICIO ACTUARÁ. CUANDO REGISTRAS UN PROVIDER, AUTOMÁTICAMENTE SE LE AGREGA LA PALABRA PROVIDER AL FINAL, SI CREAS, EL PROVIDER 'CENTRAAL' ESTARÁ DISPONIBLE COMO CENTRAALPROVIDER. NO PUEDE TENER DEPENDENCIAS, SE USA UN INYECTOR DE DEPENDENCIAS ESPECIAL. QUE INSTANCIA SÓLO PROVIDERS PARA SU CREACIÓN. REGRESA EL VALOR QUE RESULTA DEL RETURN AL INVOCAR LA PROPIEDAD $GET DE LA FUNCIÓN.
¿CUÁNDO LO USO? "DEBES USAR EL SERVICE PROVIDER SÓLO CUANDO NECESITAS EXPONER UNA API PARA ALGUNA CONFIGURACIÓN A LO LARGO DEL SISTEMA, QUE DEBA HACERSE ANTES DE QUE LA APLICACIÓN COMIENCE. ESTO ES USUALMENTE INTERESANTE SÓLO PARA SERVICIOS REUSABLES CUYO COMPORTAMIENTO QUIZÁ DEBA VARIAR LIGERAMENTE ENTRE DIFERENTES APLICACIONES."
ES UN ATAJO PARA REGISTRAR UN SERVICIO DONDE EL PROVIDER CONSISTE ÚNICAMENTE EN UNA PROPIEDAD $GET, QUE ES, REALMENTE, LA FUNCIÓN DADA. //$provide.factory(name, $getFn); app.factory(name, $getFn); Registra una service factory. Que debajo del agua, registra un provider con la propiedad $get DEFINICIÓN:
CARACTERÍSTICAS: CUANDO REGISTRAS UNA SERVICE FACTORY, AUTOMÁTICAMENTE SE CREA SU SERVICE PROVIDER CORRESPONDIENTE: NOMBREDETUFACTORY + 'PROVIDER'; PUEDE TENER DEPENDENCIAS (USAR OTROS SERVICIOS) REGRESA EL VALOR DE RETURN QUE RESULTE DE INVOCAR LA FUNCIÓN.
ES UN ATAJO PARA REGISTRAR UN SERVICIO DONDE LA PROPIEDAD $GET DE SU PROVIDER ES LA FUNCIÓN CONSTRUCTORA QUE SERÁ USADA PARA INSTANCIA DEL SERVICIO. //$provide.service(name, constructor); app.service(name, constructor); Registra un servicio, que será invocado con new, para crear la instancia del servicio. DEFINICIÓN:
CARACTERÍSTICAS: ES EL MÁS SIMPLE DE TODOS. RECIBE UN CONSTRUCTOR. PRODUCE UN SERVICIO COMO EL DE UNA SERVICE FACTORY, PERO LO HACE INVOCANDO AL CONSTRUCTOR CON EL OPERADOR NEW.
UN SERVICIO DE ANGULAR ES UN SINGLETON CREADO POR UNA SERVICE FACTORY. ESTAS SERVICE FACTORIES SON FUNCIONES, QUE, EN SU MOMENTO, FUERON CREADAS POR UN SERVICE PROVIDER. LOS SERVICE PROVIDERS SON FUNCIONES CONSTRUCTORAS. CUANDO SON INICIADAS, DEBEN CONTENER UNA PROPIEDAD LLAMADA $GET. QUE CONTIENE A LA FUNCIÓN SERVICE FACTORY. CUANDO SE SOLICITA UN SERVICIO, EL $INJECTOR ES EL REPONSABLE DE ENCONTRAR EL SERVICE PROVIDER CORRECTO. INICIARLO Y LLAMAR SU MÉTODO $GET, EJECUTANDO LA FUNCIÓN SERVICE FACTORY PARA OBTENER LA INSTANCIA DEL SERVICIO.