introducción a xamarin utilizando mvvmcross

80
Introducción a Xamarin Classic (MVVMCross) dotNet Málaga Javier Suárez

Upload: javier-suarez-ruiz

Post on 15-Feb-2017

3.565 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Introducción a Xamarin utilizando MVVMCross

Introducción a Xamarin Classic (MVVMCross)dotNet MálagaJavier Suárez

Page 2: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Javier Suárez RuizDeveloper Plain ConceptsMicrosoft MVP Windows Platform DevelopmentXamarin Certified Developer• Blog: http://geeks.ms/blogs/jsuarez• Email: [email protected]• Twitter: @jsuarezruiz

Page 3: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Page 4: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

AgendaMVVMCross

1.MVVM2.MVVMCross3.Bindings4.Comandos5.Navegación6.Listados7.Plugins

Compartir la mayor cantidad de código posible8.PCL9.DEMOs

Page 5: Introducción a Xamarin utilizando MVVMCross

Xamarin Classic

Page 6: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COMPARATIVA DE PLATAFORMAS MÓVILES. NATIVO

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Xcode Android Studio

Visual Studio

ObjectiveC o Swift

Java C#

Storyboard AXML XAMLMVC MVC MVVMPatrón diseño

Page 7: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COMPARATIVA DE PLATAFORMAS MÓVILES. XAMARIN

IDE

LenguajeVistas

iOS Android Windows Phone

Visual Studio

Visual Studio

Visual Studio

C# C# C#

Storyboard AXML XAMLMVVM MVVM MVVM

Patrón diseño

Page 8: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVM

View

ViewModel

Model

get/set PropiedadesComandos

Notifica cambios

C#

Models

ViewView

ViewModel

ViewModel

ModelM

odel

Cross PlatformEspecífico

de la Plataforma

Page 9: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

PERO… ¿PORQUÉ MVVM?• Mayor facilidad para mantener,

extender y compartir el código.• Más facilidad a la hora de

colaborar.• Testing.• Más fácil de diseñar.

Page 10: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVMCROSS

•Cross Platform MVVM Development Framework•Gratuito, Open Source, Comunidad•Soporta

•WP 7, 8, 8.1•WPF•WinRT•Xamarin.Android•Xamarin.iOS•Xamarin.Mac

•AKA Mvx

Page 11: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Portable Class Library

•1 Librería•Multiples Platformas•Incluyendo:• Xamarin.Android• Xamarin.iOS

Page 12: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Características de una Portable Class Library•Código compartido centralizado• Se depura igual que si el código estuviese en un

Proyecto específico.

•Compartir Proyecto/Assembly• NuGet

Page 13: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVMCross & PCL

View

ViewModel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewModel

ViewModel

ModelM

odel

Cross Platform -PCLEspecífico

de Plataforma

Page 14: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

INotifyPropertyChanged

Page 15: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Propriedad típica en la ViewModel

Page 16: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Binding OneWay

PersonViewModel

FirstName

LastName

DateOfBirth

First NameJonLast NameDoeDate of birth12/07/1989

Page 17: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 18: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Two Way Binding

PersonViewModel

FirstName

LastName

DateOfBirth

First NameJonLast NameDoeDate of birth12/07/1989

Page 19: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 20: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Nuestra primera App multiplataforma

Page 21: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Value Conversion

PersonViewModel

FirstName

LastName

DateOfBirth

First NameJonLast NameDoeAge24

“Age” Conversion

Page 22: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

IMvxValueConverter

Page 23: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

AgeValueConverter

Page 24: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 25: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 26: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMOConverters

Page 27: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MyViewModel

Necesita Localización

Necesita SQL

Necesita CalculadoraMy Tax

Calculator

Windows Phone Location

Inversión de Control

Windows Phone SQL

El contenedor

Page 28: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MyViewModel

Necesita Localización

Necesita SQL

Necesita CalculatorMy Tax

Calculator

iOS Location

Inversión de Control

iOS SQL

El contenedor

Page 29: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Mvx.Register<T>

RegisterSingleton

Lazy - RegisterSingleton

RegisterType

Page 30: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Registro automático

Page 31: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Mvx.Resolve<T>

Resolve

CanResolve

TryResolve

Page 32: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Mvx Construction

Resolución en el constructor

IoCConstruct

Page 33: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Nuestro primer servicio

Page 34: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Acciones (Comandos)

PersonViewModel

FirstName

LastName

DateOfBirth

First NameJonLast NameDoeDate of birth12/07/1989

AddCommand

Page 35: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

ICommand

Page 36: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

ViewModel Command

Page 37: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 38: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Llega el turno de realizar acciones!

Page 39: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COLECCIONES

PeopleViewModelHackers

List<PersonViewModel>

Greg

Jon

Daniel

Cool Hackers

Jon@redth

Greg@gshackles

Daniel@dsplaisted

Tomasz

Tomasz@cheesebar

Page 40: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

INotifyCollectionChanged

Page 41: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

ObservableCollection

Page 42: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

ViewModel Collection Property

Page 43: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 44: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 45: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 46: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UI Syntax

Page 47: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMOListados

Page 48: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Navegación

Uso de parámetrosShowViewModel<DetailViewModel>(new DetailParameters() { Index = 2 });

public void Init(DetailParameters parameters)

{

// use the parameters here

}

Page 49: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Go Back

Page 50: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMONavegación

Page 51: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Plugins

• Forma rápida y sencilla de añadir funcionalidad específica de cada plataforma.

• Usamos NuGet o NinjaCoder para añadirlos.

• Consumimos los plugins utilizando inyección de dependencias o Service Locator.

• Disponibles: Location, PhoneCall, Email, Sqlite, etc.

Page 52: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Añadiendo y utilizando plugins

Page 53: Introducción a Xamarin utilizando MVVMCross

Compartir la mayor cantidad de código posible

Page 54: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

EL PROBLEMA

Creas la misma Appvarias veces

Page 55: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COMPARATIVA DE PLATAFORMAS MÓVILES NATIVO

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Xcode Android Studio

Visual Studio

ObjectiveC o Swift

Java C#

Storyboard AXML XAMLMVC MVC MVVMPatrón diseño

Page 56: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

¿Qué podemos compartir con este planteamiento?

Page 57: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Page 58: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

El enfoque de XamarinCon Xamarin.Forms:

Se comparte más, controles compartidos

El enfoque tradicional de Xamarin

Shared UI Code

Page 59: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Page 60: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

TÉCNICAS DE REUTILIZACIÓN DE CÓDIGO

• Copiar y pegar.• Mismo código

duplicado.• Difícil de

mantener.• Evitar en lo

posible.

Ctrl-C, Ctrl-V

• Modelo• VistaModelo• Vista

MVVM

• Enlaces simbólicos.

• Depende del lenguaje.

Enlazado de ficheros

• Permite mantener código específico de cada plataforma.

• Por contra, multiplica las ramas a mantener.

Compilación Condicional

• Código manejado común a las plataformas.

Portable Class Library

Page 61: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVM

Vista VistaModelo

Modelo

Modelo

MainView.Xaml

MainViewModel.c

s

Data Binding

Comandos

Interfaz de Usuario Lógica de Negocio

Lógica de Negocio

Lógica de Presentación

Page 62: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

¿Y todo esto con una App “real”?

Page 63: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Page 64: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Utilizando Xamarin Classic

Page 65: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COMPARATIVA DE PLATAFORMAS MÓVILES XAMARIN

IDE

LenguajeVistas

iOS Android Windows Phone

Visual Studio

Visual Studio

Visual Studio

C# C# C#

Storyboard AXML XAMLMVVM MVVM MVVM

Patrón diseño

Page 66: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVM

View

ViewModel

Model

get/set PropiedadesComandos

Notifica cambios

C#

Models

ViewView

ViewModel

ViewModel

ModelM

odel

Cross PlatformEspecífico

de la Plataforma

Page 67: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

PORTABLE CLASS LIBRARY

•1 Librería•Multiples Platformas•Incluyendo:• Xamarin.Android• Xamarin.iOS

Page 68: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

CARACTERÍSTICAS DE UNA PORTABLE CLASS LIBRARY• Código compartido centralizado• Se depura igual que si el código estuviese en un

Proyecto específico.

• Compartir Proyecto/Assembly• NuGet

Page 69: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

MVVMCross & PCL

View

ViewModel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewModel

ViewModel

ModelM

odel

Cross Platform -PCLEspecífico

de Plataforma

Page 70: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Nuestra App con MVVMCross

Page 71: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Utilizando Xamarin.Forms

Page 72: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

COMPARATIVA DE PLATAFORMAS MÓVILES XAMARIN

IDE

LenguajeVistas

iOS Android Windows Phone

Visual Studio

Visual Studio

Visual Studio

C# C# C#

XAML XAML XAMLMVVM MVVM MVVM

Patrón diseño

Page 73: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

ARQUITECTURA DE APPS CON XAMARIN.FORMS

View

ViewModel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewModel

ViewModel

ModelM

odel

Cross Platform –PCL o Shared

Page 74: Introducción a Xamarin utilizando MVVMCross

DEMODEMODEMO

Ahora Xamarin.Forms

Page 75: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UTILIZANDO NATIVO

Web Services

Web Services Backend C#

App

Services Services Services

View View View

ViewModel Controller Controller

App App

Web Services Backend C# Web Services Backend C#

Page 76: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UTILIZANDO XAMARIN CLASSIC

Web Services

Web Services Backend C#

App

Services

Services Services Services

Model

View Model

View View View

Page 77: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

UTILIZANDO XAMARIN.FORMS

Web Services

Web Services Backend C#

App

Services

Services (Implementation) Services (Implementation) Services (Implementation)

Model

View Model

View (Custom Render) View (Custom Render) View (Custom Render)

View

Page 78: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

CONCLUSIONES RÁPIDAS

1. Siendo ordenado y siguiendo una serie de patrones podemos compartir entre el 65% y el 95% del código de una App móvil multiplataforma.

2. Xamarin.Forms no es siempre la solución más ideal dependiendo de las características del Proyecto.

3. No existe la abstracción absoluta. Sigue siendo necesario conocer características de cada plataforma.

Page 79: Introducción a Xamarin utilizando MVVMCross

dotNet Málaga

Preguntas y respuestas.

¿Dudas?

P&R

Page 80: Introducción a Xamarin utilizando MVVMCross

Introducción a Xamarin Classic (MVVMCross)dotNet MálagaJavier Suárez