SlideShare una empresa de Scribd logo
1 de 69
Desarrollando aplicaciones
empresariales con Xamarin.Forms,
Docker, MVVM y .NET Core
Yhorby Matias
@yhorbymatias - www.ymatias.com
Yhorby Matias
Microsoft MVP
Contratista de desarrollo
software
@yhorbymatias
www.ymatias.com
yhorbym@ymatias.com
www.ymatias.com
Contenidos
• Estructura general de la aplicación
• La arquitectura de la aplicación Xamarin
• MVVM
• Inyección de dependencia
• Loosely-coupled Messaging
• Navegación
• Servicio de comunicación
• Pruebas
• Arquitectura de back-end
• Microservicios basados en .NET Core
• Docker
www.ymatias.com
La Estructura De La
Solución
4
Fuente de la imagen: www.snowball.be
www.ymatias.com
www.ymatias.com
Vistazo a la Estructura de la Solución y la Aplicación
Final
www.ymatias.com
La arquitectura de la
aplicación Xamarin
www.ymatias.com
MVVM
www.ymatias.com
MVVM
•Patrón arquitectónico
•Basado en data binding
y commanding
•Popular para
aplicaciones XAML
testeables y
mantenibles
www.ymatias.com
“Lo que todos hicimos cuando éramos jóvenes”
www.ymatias.com
Escribir mucho código, code-behind...
... Mucho..… Por montón.
Escribir aplicaciones testeables se esta convirtiendo
en la norma, esto lo podemos lograr aplicando MVVM
Quién sabe de quién?
Beneficios de usar MVVM
• Testable
• Los desarrolladores y
diseñadores pueden trabajar
independientemente
• Se puede agregar una nueva
vista XAML encima de los
modelos de visualización sin
problemas
• Se pueden realizar cambios
en el ViewModel sin arriesgar
problemas con el modelo
www.ymatias.com
El patrón MVVM aplicado
www.ymatias.com
Respondiendo a los cambios en el modelo (vista)
• Manejalos a través de la interfaz INotifyPropertyChanged
• PropertyChanged es provocado por cambios en el modelo
de vista o cambios en el valor de propiedad del modelo
• No llamar PropertyChanged en un bucle
• No llamar PropertyChanged desde el constructor
• No llamar PropertyChanged cuando el valor no a
cambiando
Un Vistazo a los ViewModel
www.ymatias.com
Commanding
• La acción se define en un lugar y
se puede invocar desde varios
lugares en la interfaz de usuario
• Disponible a través de la interfaz
ICommand
• Define Execute () y CanExecute
()
• Podemos crear nuestros propios
comandos o usar los ya
incorporados
Behaviors
• Propiedad de comando
disponible solo en controles
derivados de ButtonBase
• Otros controles e
interacciones solo posibles a
través de “behaviors”
• Uso de un behaviors adjunto
• Uso de un behaviors
Xamarin.Forms
www.ymatias.com
Commanding De La Manera Correcta
www.ymatias.com
View-First (desde XAML)
View-First (desde el código)
Inyección de
dependencia
Inyección de
dependencia
• Tipo de inversión de control (IoC)
• Otra clase es responsable de
obtener la dependencia requerida
• Resultados en un acoplamiento
más flexible
• El contenedor maneja la creación
de instancias así como la vida útil
de los objetos
• Autofac se usa comúnmente
• Muchos otros existen
Loose-coupled
Messaging
“Xamarin.Forms MessagingCenter”
Navigación
Navegación y
MVVM
• La navegación no siempre es fácil de
incluir en un escenario de MVVM
• No se puede introducir un
acoplamiento hermético
• ¿Quién es responsable de la
navegación? ViewModel? ¿View?
• ¿Cómo podemos pasar parámetros
durante la navegación?
• Xamarin.Forms viene con la interfaz
INavigation
• Tiene lo básico para escenarios de la
vida real
Nuestro propio servicio de navegación
Servicios de
Comunicación
REST
• REST: Representational State
Transfer
• Basado en estándares abiertos de
HTTP
• Abierto para todo tipo de
aplicaciones
• Enviaremos solicitudes para
acceder a estos recursos URI y
el método HTTP se utilizan para
esto
• Resultados en el código de
estado HTTP
• 200, 404 ... basado en el
resultado de la solicitud
Comunicándose con una API REST
• Las aplicaciones suelen utilizar servicios para realizar la solicitud
de datos
• Son responsables de la comunicación con la API
• Controladores en microservicios API devuelven DTO
• Se transfieren a la aplicación
• La aplicación puede usar la clase HttpClient
• Funciona con JSON
• Devuelve HttpResponseMessage después de recibir una
solicitud
• Luego se puede leer y analizar
• Json.NET
Cargando datos del servicio
Arquitectura de back-end
ASP.NET Core
".NET Core es una plataforma de desarrollo de propósito
general mantenida por Microsoft y la comunidad .NET en
GitHub. Es multiplataforma, admite Windows, macOS y
Linux, y se puede usar en dispositivos, en la nube y en
escenarios integrados / IoT ".
fuente: https://docs.microsoft.com/en-
us/dotnet/articles/core
"ASP.NET Core es un nuevo framework de código
abierto y multiplataforma para la construcción de
aplicaciones modernas conectadas a Internet basadas
en la nube, como aplicaciones web, aplicaciones IoT y
backends móviles".
fuente: https://docs.microsoft.com/en-
us/aspnet/corefuente: https://docs.microsoft.com/en-
us/dotnet/articles/core
ASP.NET Core
•Construido sobre .NET Core
•Ligero
•Multiplataforma
•Windows, Mac y Linux
Fácil en combinación con Docker y
Microservicios
Microservicios en
contenedores
Monoliticas
• Cliente-servidor a menudo resulta
en aplicaciones escalonadas
• Tecnología específica utilizada
por nivel
• Conocidas como aplicaciones
monolíticas
• A menudo tienen un
acoplamiento estrecho entre los
componentes en cada nivel
• Los componentes no se
pueden escalar fácilmente
• Probando componentes
individuales también puede
ser difícil
Monoliticas
• No poder escalar puede ser un
problema para la preparación a la
nube
• Todas las capas son
típicamente requeridas
• Escalar significa clonar la
aplicación completa en varias
máquinas
Un vistazo a los microservicios
•Los microservicios son más fáciles de implementar y
desarrollar
•Mejor agilidad
•Mejor combinación con la nube
•La aplicación se descompondrá en varios componentes
• Los componentes entregan la funcionalidad de la aplicación
•Microservicio = aplicación pequeña, preocupación
independiente
• Tiene contratos para comunicarse con otros servicios
•Microservicios típicos
• carrito de compras
• Sistema de pago
• Sistema de inventario
Un vistazo a los microservicios
• Puede escalar de forma independiente
• Si un área requiere más potencia de procesamiento, puede
ampliarse por separado
• Otras partes pueden permanecer igual
•La ampliación puede ser instantánea
•Interfaz web es para manejar más tráfico
entrante
Un vistazo a los microservicios
• Los microservicios administran sus propios
datos
• Localmente en el servidor en el que se ejecutan
• Evite la sobrecarga de la red
• Procesamiento mas rapido
• Incluso elimina la necesidad de almacenar en
caché
• Soporte para actualizaciones independientes
• Una evolución más rápida
• Actualizaciones continuas, en un subconjunto de instancias de
reversión de soporte de servicio único
Beneficios de
usar
microservicios
• Evoluciona fácilmente
• Escalan de forma
independiente
• Aislar problemas del
microservicio defectuoso
• Puede usar lo último y lo
mejor
• No está obligado a usar
tecnologías antiguas
Desventajas
de usar
microservicios
• Particionar una aplicación real es
difícil
• Compleja Intercomunicación entre
servicios
• Consistencia eventual
• Las transacciones atómicas a
menudo no
soportado
• La implementación (inicial) puede ser
más difícil
• La comunicación directa entre cliente
y microservicio podría no ser una
buena idea
Contenedores
“La Containerización es un enfoque para el desarrollo
de software en el que una aplicación y su conjunto
versionado de dependencias, más su configuración
de entorno abstraída como archivos de manifiesto de
implementación, se empaquetan juntos como una
imagen de contenedor, se prueban como una unidad
y se implementan en un sistema operativo host.”
Agregando contenedores a la mezcla
• El contenedor es un entorno
operativo aislado, controlado por
recursos y portátil
• Las aplicaciones en contenedores
se ejecutan sin tocar los recursos
del host u otros contenedores
• Actúa como una VM o máquina
física
• Funciona muy bien en
combinación con microservicios
• Docker es el enfoque utilizado
más comúnmente aquí
¿Qué es un contenedor realmente?
• Un Contenedor ejecuta un sistema operativo
• Contiene sistema de archivos
• Se puede acceder a través de la red como una máquina / VM real
• Contiene la aplicación (y dependencias)
• •En general, requieren menos recursos para funcionar que las
máquinas virtuales comunes.
• Permiten escalar de forma fácil y rápida al agregar contenedores
nuevos.
Maquinas virtuales VS Contendores
Usando Docker para alojar
los microservicios
Usando Docker
para alojar los
microservicios
• Cada contenedor alberga una
parte separada de la aplicación
• Área única de funcionalidad
• Cada microservicio tiene su
propia base de datos
• Permite el desacoplamiento completo
• Se puede mejorar usando eventos de
aplicación
• Service bus
Resumen
• MVVM es el estándar de referencia para construir
aplicaciones Xamarin.Forms de nivel empresarial
• .NET Core es una buena opción para crear microservicios
• Docker ayuda con el despliegue de microservicios
Presentación disponible en
www.ymatias.com
Referencias
• Architecting and developing containerized and
microservice based .NET Applications
• https://aka.ms/microservicesebook
• Containers/Docker lifecycle (DevOps, CI/CD, etc.) with
Microsoft Tools
• https://aka.ms/dockerlifecycleebook
• Enterprise Apps Patterns with Xamarin.Forms.
• https://aka.ms/xamarinpatternsebook
Desarrollando aplicaciones
empresariales con Xamarin.Forms,
Docker, MVVM y .NET Core
Yhorby Matias
@yhorbymatias - www.ymatias.com

Más contenido relacionado

La actualidad más candente

Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2José Vázquez
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Christian Rodriguez
 
Carasteristicas de compiladores sheshar
Carasteristicas de compiladores shesharCarasteristicas de compiladores sheshar
Carasteristicas de compiladores shesharudalrico
 
Presentacion tecnica microsoft.net
Presentacion tecnica microsoft.netPresentacion tecnica microsoft.net
Presentacion tecnica microsoft.netRulo Rosaz
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
Java lenguaje de desarrollo
Java lenguaje de desarrolloJava lenguaje de desarrollo
Java lenguaje de desarrolloDavid
 
Visualización
VisualizaciónVisualización
Visualizaciónpaolajazz
 
Visualización
VisualizaciónVisualización
Visualizaciónpaolajazz
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicasAny Saula
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopRestorando
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...Software Guru
 

La actualidad más candente (17)

Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2Ponencia virtualización sl alejandro vázquez 2
Ponencia virtualización sl alejandro vázquez 2
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
Carasteristicas de compiladores sheshar
Carasteristicas de compiladores shesharCarasteristicas de compiladores sheshar
Carasteristicas de compiladores sheshar
 
Presentacion tecnica microsoft.net
Presentacion tecnica microsoft.netPresentacion tecnica microsoft.net
Presentacion tecnica microsoft.net
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Tecnologia ASP.net
Tecnologia ASP.netTecnologia ASP.net
Tecnologia ASP.net
 
Java lenguaje de desarrollo
Java lenguaje de desarrolloJava lenguaje de desarrollo
Java lenguaje de desarrollo
 
Visualización
VisualizaciónVisualización
Visualización
 
Visualización
VisualizaciónVisualización
Visualización
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshop
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...
 

Similar a Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y .NET CoreCodecampSDQ

Contenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de AplicacionesContenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de AplicacionesBitnami
 
.Net Conf UY 2017: Un paseo por Azure Service Fabric
.Net Conf UY 2017: Un paseo por Azure Service Fabric.Net Conf UY 2017: Un paseo por Azure Service Fabric
.Net Conf UY 2017: Un paseo por Azure Service FabricGuillermo Javier Bellmann
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Eduardo Castro
 
Automatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudAutomatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...campus party
 
Desarrolla tu próxima app con Xamarin & MvvmCross
Desarrolla tu próxima app con Xamarin & MvvmCrossDesarrolla tu próxima app con Xamarin & MvvmCross
Desarrolla tu próxima app con Xamarin & MvvmCrossNicolas Milcoff
 
Virtual desktop infrastructure
Virtual desktop infrastructureVirtual desktop infrastructure
Virtual desktop infrastructureOmega Peripherals
 
12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del Proyecto12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del ProyectoLuis Fernando Aguas Bucheli
 
Virtual desktop infrstructure (vdi)
Virtual desktop infrstructure (vdi)Virtual desktop infrstructure (vdi)
Virtual desktop infrstructure (vdi)Omega Peripherals
 
Ionic y angular.js
Ionic y angular.jsIonic y angular.js
Ionic y angular.jsGDG Cali
 
Web App Container
Web App ContainerWeb App Container
Web App ContainerCDS
 
Windows server 2012 jose luis
Windows server 2012 jose luisWindows server 2012 jose luis
Windows server 2012 jose luisyanez1814
 
Windows server 2012 jose luis
Windows server 2012 jose luisWindows server 2012 jose luis
Windows server 2012 jose luisyanez1814
 
Symfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony FrameworkSymfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony Frameworkexcedesoft
 

Similar a Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y .NET CoreCodecampSDQ (20)

Cloud Native Development in the JVM
Cloud Native Development in the JVMCloud Native Development in the JVM
Cloud Native Development in the JVM
 
Contenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de AplicacionesContenedores y el Futuro del Despliegue de Aplicaciones
Contenedores y el Futuro del Despliegue de Aplicaciones
 
.Net Conf UY 2017: Un paseo por Azure Service Fabric
.Net Conf UY 2017: Un paseo por Azure Service Fabric.Net Conf UY 2017: Un paseo por Azure Service Fabric
.Net Conf UY 2017: Un paseo por Azure Service Fabric
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker
 
Automatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloudAutomatización del despliegue de aplicaciones multi cloud
Automatización del despliegue de aplicaciones multi cloud
 
Microservicios.pptx
Microservicios.pptxMicroservicios.pptx
Microservicios.pptx
 
Desarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud NativeDesarrollo moderno con DevOps y Cloud Native
Desarrollo moderno con DevOps y Cloud Native
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
 
Desarrolla tu próxima app con Xamarin & MvvmCross
Desarrolla tu próxima app con Xamarin & MvvmCrossDesarrolla tu próxima app con Xamarin & MvvmCross
Desarrolla tu próxima app con Xamarin & MvvmCross
 
Web como el portal de la nube.pdf
Web como el portal de la nube.pdfWeb como el portal de la nube.pdf
Web como el portal de la nube.pdf
 
SGCE 2014 micro services
SGCE 2014 micro servicesSGCE 2014 micro services
SGCE 2014 micro services
 
Virtual desktop infrastructure
Virtual desktop infrastructureVirtual desktop infrastructure
Virtual desktop infrastructure
 
12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del Proyecto12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del Proyecto
 
Virtual desktop infrstructure (vdi)
Virtual desktop infrstructure (vdi)Virtual desktop infrstructure (vdi)
Virtual desktop infrstructure (vdi)
 
Introducción a Asp.Net Mvc
Introducción a Asp.Net MvcIntroducción a Asp.Net Mvc
Introducción a Asp.Net Mvc
 
Ionic y angular.js
Ionic y angular.jsIonic y angular.js
Ionic y angular.js
 
Web App Container
Web App ContainerWeb App Container
Web App Container
 
Windows server 2012 jose luis
Windows server 2012 jose luisWindows server 2012 jose luis
Windows server 2012 jose luis
 
Windows server 2012 jose luis
Windows server 2012 jose luisWindows server 2012 jose luis
Windows server 2012 jose luis
 
Symfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony FrameworkSymfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony Framework
 

Más de Yhorby Matias

Asegurando la nube con Microsoft Security Center || Open saturday la Romana
Asegurando la nube con Microsoft Security Center || Open saturday la RomanaAsegurando la nube con Microsoft Security Center || Open saturday la Romana
Asegurando la nube con Microsoft Security Center || Open saturday la RomanaYhorby Matias
 
Interacciones más naturales con Servicios Cognitivos
Interacciones más naturales con Servicios CognitivosInteracciones más naturales con Servicios Cognitivos
Interacciones más naturales con Servicios CognitivosYhorby Matias
 
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"Yhorby Matias
 
Xamarin mvvm( introduccion)
Xamarin  mvvm( introduccion)Xamarin  mvvm( introduccion)
Xamarin mvvm( introduccion)Yhorby Matias
 
Xamarin y otras especias ( introduccion) santiago
Xamarin  y otras especias ( introduccion) santiagoXamarin  y otras especias ( introduccion) santiago
Xamarin y otras especias ( introduccion) santiagoYhorby Matias
 
El Perfil de un Informatico
El Perfil de un InformaticoEl Perfil de un Informatico
El Perfil de un InformaticoYhorby Matias
 
Xamarin Fest Santo Domingo ( introduccion)
Xamarin  Fest Santo Domingo ( introduccion)Xamarin  Fest Santo Domingo ( introduccion)
Xamarin Fest Santo Domingo ( introduccion)Yhorby Matias
 

Más de Yhorby Matias (7)

Asegurando la nube con Microsoft Security Center || Open saturday la Romana
Asegurando la nube con Microsoft Security Center || Open saturday la RomanaAsegurando la nube con Microsoft Security Center || Open saturday la Romana
Asegurando la nube con Microsoft Security Center || Open saturday la Romana
 
Interacciones más naturales con Servicios Cognitivos
Interacciones más naturales con Servicios CognitivosInteracciones más naturales con Servicios Cognitivos
Interacciones más naturales con Servicios Cognitivos
 
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"
Aplicaciones inteligentes con Xamarin y Microsoft Cognitive Services "FooCamp"
 
Xamarin mvvm( introduccion)
Xamarin  mvvm( introduccion)Xamarin  mvvm( introduccion)
Xamarin mvvm( introduccion)
 
Xamarin y otras especias ( introduccion) santiago
Xamarin  y otras especias ( introduccion) santiagoXamarin  y otras especias ( introduccion) santiago
Xamarin y otras especias ( introduccion) santiago
 
El Perfil de un Informatico
El Perfil de un InformaticoEl Perfil de un Informatico
El Perfil de un Informatico
 
Xamarin Fest Santo Domingo ( introduccion)
Xamarin  Fest Santo Domingo ( introduccion)Xamarin  Fest Santo Domingo ( introduccion)
Xamarin Fest Santo Domingo ( introduccion)
 

Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y .NET CoreCodecampSDQ

  • 1. Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y .NET Core Yhorby Matias @yhorbymatias - www.ymatias.com
  • 2. Yhorby Matias Microsoft MVP Contratista de desarrollo software @yhorbymatias www.ymatias.com yhorbym@ymatias.com www.ymatias.com
  • 3. Contenidos • Estructura general de la aplicación • La arquitectura de la aplicación Xamarin • MVVM • Inyección de dependencia • Loosely-coupled Messaging • Navegación • Servicio de comunicación • Pruebas • Arquitectura de back-end • Microservicios basados en .NET Core • Docker www.ymatias.com
  • 4. La Estructura De La Solución 4
  • 5. Fuente de la imagen: www.snowball.be www.ymatias.com
  • 7. Vistazo a la Estructura de la Solución y la Aplicación Final www.ymatias.com
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. La arquitectura de la aplicación Xamarin www.ymatias.com
  • 14. MVVM •Patrón arquitectónico •Basado en data binding y commanding •Popular para aplicaciones XAML testeables y mantenibles www.ymatias.com
  • 15. “Lo que todos hicimos cuando éramos jóvenes” www.ymatias.com
  • 16. Escribir mucho código, code-behind... ... Mucho..… Por montón.
  • 17. Escribir aplicaciones testeables se esta convirtiendo en la norma, esto lo podemos lograr aplicando MVVM
  • 18. Quién sabe de quién?
  • 19. Beneficios de usar MVVM • Testable • Los desarrolladores y diseñadores pueden trabajar independientemente • Se puede agregar una nueva vista XAML encima de los modelos de visualización sin problemas • Se pueden realizar cambios en el ViewModel sin arriesgar problemas con el modelo www.ymatias.com
  • 20. El patrón MVVM aplicado www.ymatias.com
  • 21. Respondiendo a los cambios en el modelo (vista) • Manejalos a través de la interfaz INotifyPropertyChanged • PropertyChanged es provocado por cambios en el modelo de vista o cambios en el valor de propiedad del modelo • No llamar PropertyChanged en un bucle • No llamar PropertyChanged desde el constructor • No llamar PropertyChanged cuando el valor no a cambiando
  • 22.
  • 23. Un Vistazo a los ViewModel www.ymatias.com
  • 24. Commanding • La acción se define en un lugar y se puede invocar desde varios lugares en la interfaz de usuario • Disponible a través de la interfaz ICommand • Define Execute () y CanExecute () • Podemos crear nuestros propios comandos o usar los ya incorporados
  • 25.
  • 26. Behaviors • Propiedad de comando disponible solo en controles derivados de ButtonBase • Otros controles e interacciones solo posibles a través de “behaviors” • Uso de un behaviors adjunto • Uso de un behaviors Xamarin.Forms www.ymatias.com
  • 27.
  • 28.
  • 29. Commanding De La Manera Correcta www.ymatias.com
  • 33. Inyección de dependencia • Tipo de inversión de control (IoC) • Otra clase es responsable de obtener la dependencia requerida • Resultados en un acoplamiento más flexible • El contenedor maneja la creación de instancias así como la vida útil de los objetos • Autofac se usa comúnmente • Muchos otros existen
  • 34.
  • 36.
  • 39. Navegación y MVVM • La navegación no siempre es fácil de incluir en un escenario de MVVM • No se puede introducir un acoplamiento hermético • ¿Quién es responsable de la navegación? ViewModel? ¿View? • ¿Cómo podemos pasar parámetros durante la navegación? • Xamarin.Forms viene con la interfaz INavigation • Tiene lo básico para escenarios de la vida real
  • 40. Nuestro propio servicio de navegación
  • 42. REST • REST: Representational State Transfer • Basado en estándares abiertos de HTTP • Abierto para todo tipo de aplicaciones • Enviaremos solicitudes para acceder a estos recursos URI y el método HTTP se utilizan para esto • Resultados en el código de estado HTTP • 200, 404 ... basado en el resultado de la solicitud
  • 43. Comunicándose con una API REST • Las aplicaciones suelen utilizar servicios para realizar la solicitud de datos • Son responsables de la comunicación con la API • Controladores en microservicios API devuelven DTO • Se transfieren a la aplicación • La aplicación puede usar la clase HttpClient • Funciona con JSON • Devuelve HttpResponseMessage después de recibir una solicitud • Luego se puede leer y analizar • Json.NET
  • 44. Cargando datos del servicio
  • 47. ".NET Core es una plataforma de desarrollo de propósito general mantenida por Microsoft y la comunidad .NET en GitHub. Es multiplataforma, admite Windows, macOS y Linux, y se puede usar en dispositivos, en la nube y en escenarios integrados / IoT ". fuente: https://docs.microsoft.com/en- us/dotnet/articles/core
  • 48. "ASP.NET Core es un nuevo framework de código abierto y multiplataforma para la construcción de aplicaciones modernas conectadas a Internet basadas en la nube, como aplicaciones web, aplicaciones IoT y backends móviles". fuente: https://docs.microsoft.com/en- us/aspnet/corefuente: https://docs.microsoft.com/en- us/dotnet/articles/core
  • 49. ASP.NET Core •Construido sobre .NET Core •Ligero •Multiplataforma •Windows, Mac y Linux Fácil en combinación con Docker y Microservicios
  • 51. Monoliticas • Cliente-servidor a menudo resulta en aplicaciones escalonadas • Tecnología específica utilizada por nivel • Conocidas como aplicaciones monolíticas • A menudo tienen un acoplamiento estrecho entre los componentes en cada nivel • Los componentes no se pueden escalar fácilmente • Probando componentes individuales también puede ser difícil
  • 52. Monoliticas • No poder escalar puede ser un problema para la preparación a la nube • Todas las capas son típicamente requeridas • Escalar significa clonar la aplicación completa en varias máquinas
  • 53. Un vistazo a los microservicios •Los microservicios son más fáciles de implementar y desarrollar •Mejor agilidad •Mejor combinación con la nube •La aplicación se descompondrá en varios componentes • Los componentes entregan la funcionalidad de la aplicación •Microservicio = aplicación pequeña, preocupación independiente • Tiene contratos para comunicarse con otros servicios •Microservicios típicos • carrito de compras • Sistema de pago • Sistema de inventario
  • 54. Un vistazo a los microservicios • Puede escalar de forma independiente • Si un área requiere más potencia de procesamiento, puede ampliarse por separado • Otras partes pueden permanecer igual •La ampliación puede ser instantánea •Interfaz web es para manejar más tráfico entrante
  • 55. Un vistazo a los microservicios • Los microservicios administran sus propios datos • Localmente en el servidor en el que se ejecutan • Evite la sobrecarga de la red • Procesamiento mas rapido • Incluso elimina la necesidad de almacenar en caché • Soporte para actualizaciones independientes • Una evolución más rápida • Actualizaciones continuas, en un subconjunto de instancias de reversión de soporte de servicio único
  • 56. Beneficios de usar microservicios • Evoluciona fácilmente • Escalan de forma independiente • Aislar problemas del microservicio defectuoso • Puede usar lo último y lo mejor • No está obligado a usar tecnologías antiguas
  • 57. Desventajas de usar microservicios • Particionar una aplicación real es difícil • Compleja Intercomunicación entre servicios • Consistencia eventual • Las transacciones atómicas a menudo no soportado • La implementación (inicial) puede ser más difícil • La comunicación directa entre cliente y microservicio podría no ser una buena idea
  • 59. “La Containerización es un enfoque para el desarrollo de software en el que una aplicación y su conjunto versionado de dependencias, más su configuración de entorno abstraída como archivos de manifiesto de implementación, se empaquetan juntos como una imagen de contenedor, se prueban como una unidad y se implementan en un sistema operativo host.”
  • 60. Agregando contenedores a la mezcla • El contenedor es un entorno operativo aislado, controlado por recursos y portátil • Las aplicaciones en contenedores se ejecutan sin tocar los recursos del host u otros contenedores • Actúa como una VM o máquina física • Funciona muy bien en combinación con microservicios • Docker es el enfoque utilizado más comúnmente aquí
  • 61. ¿Qué es un contenedor realmente? • Un Contenedor ejecuta un sistema operativo • Contiene sistema de archivos • Se puede acceder a través de la red como una máquina / VM real • Contiene la aplicación (y dependencias) • •En general, requieren menos recursos para funcionar que las máquinas virtuales comunes. • Permiten escalar de forma fácil y rápida al agregar contenedores nuevos.
  • 62. Maquinas virtuales VS Contendores
  • 63. Usando Docker para alojar los microservicios
  • 64. Usando Docker para alojar los microservicios • Cada contenedor alberga una parte separada de la aplicación • Área única de funcionalidad • Cada microservicio tiene su propia base de datos • Permite el desacoplamiento completo • Se puede mejorar usando eventos de aplicación • Service bus
  • 65. Resumen • MVVM es el estándar de referencia para construir aplicaciones Xamarin.Forms de nivel empresarial • .NET Core es una buena opción para crear microservicios • Docker ayuda con el despliegue de microservicios
  • 66.
  • 68. Referencias • Architecting and developing containerized and microservice based .NET Applications • https://aka.ms/microservicesebook • Containers/Docker lifecycle (DevOps, CI/CD, etc.) with Microsoft Tools • https://aka.ms/dockerlifecycleebook • Enterprise Apps Patterns with Xamarin.Forms. • https://aka.ms/xamarinpatternsebook
  • 69. Desarrollando aplicaciones empresariales con Xamarin.Forms, Docker, MVVM y .NET Core Yhorby Matias @yhorbymatias - www.ymatias.com