Este es mi aporte al primer calendario de adviento .NET MAUI.
En esta ocasion conoceremos de forma básica el uso del patrón servicio combinado con la inyección de dependencia en un app .NET MAUI.
La demo es muy simple y me limitaré en explicar el patrón y como utilizarlo.
No usaremos plug-in's ni librerías externas, el soporte al patrón viene nativo dentro del framework de dotnet.
Si has programado alguna vez en .NET Core, sobre todo ASP .Net Core este patrón te será muy familiar ya que se utiliza de la misma forma.
El código del ejemplo esta aqui: https://github.com/iperezmx87/AdvientoMAUI2022
Para no hacerles el cuento largo, comentaremos los aspectos más importantes del proyecto
Estructura
Como verás y, como recordarás, el objetivo del patrón servicio es proveer desacoplamiento entre las diferentes funcionalides y responsabilidades, para respetar algunos de los principios del acrónimo SOLID.
Aqui tienes una referencia a SOLID: https://es.wikipedia.org/wiki/SOLID
En esta demo, coloque los siguientes componentes basicos del patrón:
Interfaz IServicioSeguridad que es el contrato que deberán implementar los diferentes servicios
En las plataformas destino, se colocan las clases de implementación del contrato, en este caso de seguridad, donde cada pataforma tendria su propia implementación.
2. Contrato e implementaciones:
Se muestran las implementaciones del contrato establecido para la seguridad, aqui la diferencia es que la validacion es diferente, para efectos de la demo, pero en teoría se establecerían diferentes mecanismos dependiendo del fabricante. Si gustan una demo mas compleja, déjamelo en los comentarios.
3. Inyección de los servicios
En este caso, se muestran fragmentos de la clase MauiProgram.cs donde se hacen uso de las directivas de preprocesador de MAUI para la detección de la plataforma donde se este compilando el proyecto.
Recordemos que, cada que se cambia el target de ejecución del proyecto de MAUI, estas variables de preprocesador cambian a la siguiente estructura
Emulador o dispositivo android - #ANDROID
Emulador o dispositivo iOS - #IOS
Dispositivo o PC Windows - #WINDOWS
Dispositivo macos - #MACCATALYST
Por lo tanto, las variables de preprocesador cambian y el servicio que se cargará debe ser el de cada plataforma.
Usamos el método "AddScoped" para generar una instancia que se inyectará dentro del app de MAUI, por lo que no es necesario utilizar en ningun momento la palabra "new" invirtiendo el control e inyectando la dependencia.
MAUI app builder posee tambien la capacidad de inyectar las páginas xaml a traves de la clase Program, en otro post o en un live de youtube (https://www.youtube.com/channel/UCLmSu2dae4bepE_FQzEOZzg) les enseñaré como hacerlo.
4. Inyeccion de la dependencia
Esta es la clase App.xaml.cs, el punto de entrada del app MAUI, aqui es donde la dependencia generada es inyectada y enviada a las paginas dentro del app. En tiempo de ejecución la instancia generada será la previamente configurada en MauiProgram.
5. Uso del servicio
Aqué se muestra el fuente del code-behind de la página que usamos en la demo. Como puedes observarla dependencia del servicio es inyectada y usada en un botón, aqui el truco es que en cada dispositivo se validará la credencial de una forma diferente, quizas en windows tengas un SQL y en moviles un web api, entonces necesitas diferentes logicas pero que entreguen el mismo resultado.
¿Cómo se ve reflejado en el app?
6. prueba en emuladores
Si logras ejecutar el codigo (el cual está hecho para que lo clones y lo ejecutes) notarás que al ingresar otras credenciales o intercambiar la palabra secreta esta no se va a validar, por lo que se comprueba que nuestra lógica es inyectada en base a las condiciones mencionadas anteriormente.
7. Conclusión
A lo largo de esta lectura, aprendimos cómo implementar el patrón de servicio en un app de .NET MAUI y comprobamos que funciona de forma correcta.
Los siguientes pasos es que experimentes con este y verás que el realizar aplicaciones escalables y mantenibles nunca ha sido tan fácil :)
Por favor, si tienes dudas o quieres contactrme, te dejo mi Twitter @pesimx87, y te dejé mi canal de YT para que me puedas visitar, ahí tengo algunos videos de Xamarin y de MAUI.
Felices lineas.
Comments