2. ¿Quién soy?
• Rodrigo Díaz Concha
– Blog: rdiazconcha.com
– E-mail: rodrigo@rdiazconcha.com
– Twitter: @rdiazconcha
• Microsoft Silverlight MVP, MCSD, MCTS, MCPD, MCT,
Orador de INETA Latam
• Master Trainer de Silverlight (Silverlight Tour)
– silverlight-tour.com
• Fundador de La Liga Silverlight – Primer Comunidad
MSDN en Español acerca de Silverlight
– blogs.LigaSilverlight.com
• Orador frecuente en eventos en Guatemala, El Salvador,
Costa Rica, Venezuela, Colombia, Perú, Chile y México
3. Agenda
• ¿Silverlight?
• Arquitectura de Aplicaciones Silverlight
• Aplicaciones de Escritorio
• Acceso a Datos
• Enlace de Datos
• El Patrón de Diseño Model-View-
ViewModel (MVVM)
5. ¿Silverlight?
• La realidad:
– Silverlight 5 será liberado muy pronto
– 1 millón de desarrolladores
– Adopción creciente
– Plataforma de desarrollo para Windows
Phone 7.x
– Hay un equipo entero para XAML en
Windows 8
– No compite con HTML 5
9. Aplicaciones de Escritorio
• Se configuran en las
Propiedades del
Proyecto de
Silverlight
• Se crea el archivo
OutOfBrowserSettings.x
ml
– Al compilar, se mezcla
con el Manifiesto<OutOfBrowserSettings
ShortName="Ejemplo"
EnableGPUAcceleration="False"
ShowInstallMenuItem="True">
<OutOfBrowserSettings.Blurb>Esto es un
ejemplo</OutOfBrowserSettings.Blurb>
<OutOfBrowserSettings.WindowSettings>
<WindowSettings Title="Ejemplo"
Height="480" Width="640" Top="10"
Left="10" WindowStartupLocation="Manual"
/>
</OutOfBrowserSettings.WindowSettings>
<OutOfBrowserSettings.Icons />
</OutOfBrowserSettings>
10. Aplicaciones de Escritorio
• El usuario debe permitir explícitamente la
instalación y definir el lugar para los
accesos directos
• Por seguridad: el botón de OK tarda 3
segundos en habilitarse
11. Aplicaciones de Escritorio
• Pueden ejecutar como cualquier otra
aplicación de escritorio
– Confianza Parcial (por defecto)
– Confianza Elevada (opcional)
13. Acceso a Datos
• SharePoint
– Modelo de Objetos de SharePoint (a partir de 2010)
– Servicios Web de SharePoint
• No SharePoint
– Servicios SOAP
– Servicios REST
– WCF
– WCF Data Services
– WCF RIA Services
– … etc. !
14. Acceso a Datos
• Modelo de Objetos de SharePoint para
Silverlight
– Microsoft.SharePoint.Client.dll
– http://msdn.microsoft.com/en-
us/library/ee537855.aspx
ClientContext clientContext =
ClientContext.Current;
oWebsite = clientContext.Web; ListCollection
collList = oWebsite.Lists;
//Usa los datos obtenidos
15. Acceso a Datos
• Proxies cliente
– Agregando la referencia a un Servicio Web
autodescriptivo (WSDL)
• WebClient
• HttpWebRequest / HttpWebResponse
16. Manejo de Datos
• XML
– LINQ para XML
– XmlReader
– XmlSerializer
• JSON
– DataContractJsonSerializer
– JSON.NET
• POCO
18. Enlace de Datos
• Modelo sencillo y poderos
• Permite una separación de
preocupaciones entre las diferentes capas
• No modificas directamente los controles
Control Destino Objeto Fuente
20. ¿Qué es MVVM?
• Patrón de Diseño natural para plataformas de
XAML
– {Binding}
• Ventajas
– Separación de preocupaciones
– Pruebas Unitarias
– Mantenimiento de código
– Consistencia
– Desacoplamiento
– Flujo de trabajo entre diseñadores y
desarrolladores
22. Model-View-ViewModel
• Vista
– Interface de Usuario
– Estilos, Recursos
– UserControl, Page,
ChildWindow,
DataTemplate
– El Contexto de Datos es
el ViewModel
– Poco o nada de code-
behind
– Actualizada a través de
Bindings
– Comportamientos
ViewViewViewView
ViewModelViewModelViewModelViewModel
ModelModelModelModel
23. Model-View-ViewModel
• Modelo de la Vista
– Abstracción de la Vista
– Adapta el Modelo a la Vista
– Mantiene el estado
– Expone propiedades a las
que se enlaza la Vista
(datos y Comandos)
– Expone métodos que los
Comportamientos de una
Vista pueden invocar
– Desacoplamiento y
Testability es el objetivo
principal
ViewViewViewView
ViewModelViewModelViewModelViewModel
ModelModelModelModel
24. Model-View-ViewModel
• Modelo
– Tu dominio
– Objetos de datos
• DTO, POCO
• Modelo de datos
generado
• Modelo de proxy
generado
– Capa de Servicios
• Repositorios
• Objetos de Negocio
ViewViewViewView
ViewModelViewModelViewModelViewModel
ModelModelModelModel