Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
1. 35ª Reunião Lisboa - 26/01/2013 http://netponto.org
Como deixar de fazer "copy and paste" entre
Windows Store e Windows Phone Apps
Sara Silva
2. Sara Silva
Windows 8 & Windows Phone Developer
MCPD: Windows Developer 3.5
MCTS: WPF 3.5/4.0 e Windows Forms 3.5
Lic. Matemática: Especialização em Computação - DMUC
Comunidades:
3. Agenda
• Introdução
• Partilha de ficheiros de código
• Portable Class Library
• Portable Class Library + MVVM
• Bibliotecas
• Conclusão
4. Introdução
2 Plataformas
Pílula WP Pílula Win8
6 projetos Galinho WP Galinho Win8
3 aplicações 24 WP 24 Win8
Nota: Considerando a mesma versão para WP7.5 e WP8
5. Introdução
• Código repetido entre projetos => 2x a mesma tarefa.
• Bug em WP => bug em Win8 e vice versa => 2x a mesma correção.
• Menos funcionalidades.
• Menos tempo para outras tarefas.
• Custos a dobrar:
“Se o custo para a empresa for Y €/hora => 2*Y€/hora ”
“Se o meu custo for horas de sono => Durmo menos horas”
• Desmotivação para quem desenvolve.
6. Partilha de ficheiros de código
• Usar “Add as Link” para partilhar ficheiro de código
dentro de vários projetos.
• Usar de diretivas para diferenciar aspetos incompatíveis.
• Usar classes e métodos parciais.
• Altera-se uma vez, altera-se em todos os projetos.
“Reusing code by including code files in multiple projects.”
7. Partilha de ficheiros de código
Usando diretivas:
• NETFX_CORE Windows 8 Pode gerar code
• WINDOWS_PHONE Windows Phone ilegível
#if !NETFX_CORE
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
#else
public object Convert(object value, Type targetType, object parameter, string culture)
#endif
8. Partilha de ficheiros de código
Classes e métodos parciais
• Funcionalidade partilhadas num ficheiro.
• Funcionalidades adicionais que são especificas da plataforma num ficheiro adicional.
• Classes parciais que são marcadas como “parcial” são compiladas numa “single class”.
• Separar funcionalidades especificas da plataforma
• É possível utilizar métodos parciais como mecanismo para separar logica especifica da
plataforma.
DataSource.cs | DataSource.WP8.cs | DataSource.Win8.cs
11. Portable Class Library
Mais valia no desenvolvimento multi-plataforma de aplicações usando
.Net Framework, uma vez que permite criar “portable assemblies” que
podem ser referenciadas em projectos de várias plataformas sem que
sejam preciso efetuar alterações.
Vai conter o mínimo denominador comum de tipos de:
• .NET Framework
• Silverlight
• .NET for Windows Store apps,
• Windows Phone
• Xbox 360
14. Portable Class Library
O Visual Studio 2010 (Extensão+SP1) e 2012 disponibilizam template para Portable Class Library.
Definição de “targets”:
Criação do projeto Editar propriedades do projeto
15. Portable Class Library
O Visual Studio 2010 (Extensão+SP1) e 2012 disponibilizam template para Portable Class Library.
Resultado da criação:
“ One Source
One Project
One Binary
Multiple Platforms!”
17. Portable Class Library
• Não contém tipos relacionados com a UI porque o comportamento difere
entre a UI das diferentes plataformas;
• Para criar Windows Store Apps é requisito ter Windows 8, para criar Portable
Class libraries com suporte a Windows Store Apps não é necessário.
• Em aplicações Silverlight é preciso definir “minimum runtime version
required”
<param name="minRuntimeVersion" value="4.0.60129.0" />
19. Portable Class Library + MVVM
Classes disponíveis para implementar MVVM:
System.Collections.ObjectModel
• ObservableCollection<T> class
• ReadOnlyObservableCollection<T> class
System.Collections.Specialized
• INotifyCollectionChanged class
• NotifyCollectionChangedAction class
• NotifyCollectionChangedEventArgs class
• NotifyCollectionChangedEventHandler class
System.ComponentModel
• DataErrorsChangedEventArgs class
• INotifyDataErrorInfo class
• INotifyPropertyChanged class
• System.Windows.Input.ICommand class
• All classes in the System.ComponentModel.DataAnnotations namespace
22. Bibliotecas
• Microsoft.Bcl.Async
Permite usar async/await sem .Net Framework 4.5
• Portable Toolkit for MVVM
Fork do toolkit MVVM Light: Portable.MvvmLightLibs
• MvvmCross
Biblioteca para implementar MVVM em Windows Phone, Windows Store, iOS,
and Android
• Portable Class Libraries Contrib
Portable adapters and APIs
• Json.NET
JSON framework
23. Conclusão
• Separar a UI da lógica da aplicação aplicando o padrão MVVM.
• Partilhar “portable .Net code” através de Portable Class Libraries.
“Abstractration pattern is the key”
• A injeção de dependência permite encapsular especificidades da plataforma.
• Funcionalidade comuns da Windows Runtime API podem ser partilhas através da partilha
de ficheiros de código (“Add as Link”).
• Se necessário, estender classes partilhadas para adicionar funcionalidades especificas da
plataforma.
• Quando pretendemos partilhar código, o desenho da arquitetura deve ter isso em mente!
25. Referências
• Cross-Platform Development with the .NET Framework
• Using Portable Class Library with Model-View-View Model
• Create Cross-platform Apps using Portable Class Libraries
• Building Apps for Windows Phone 8 Jump Start (MVA)
• Visual Studio Toolbox:Portable Class Libraries
• Create a Continuous Client Using Portable Class Libraries
• How to Leverage your Code across WP8 and Windows 8
• Portable Library Articles series by Jeremy Likness
• How to Make Portable Class Libraries Work for You
• Portable Class Library Enlightenment / Adaptation
• Portable Class Libraries – Net Framework 4.0
• Portable Class Libraries – Net Framework 4.5
MVVM Light Source Code:Open Win8 and WP8 Solution ;Show CodeHow to do “Add as Link” – use the RelayCommand – file is inside the .Net3,5Show directives - RelayCommandParcial class in diferent files. Show the WeakFunc.Win8
Quandocombinamos com .Net 4.0 e WP7 vamosencontrarmaisincompatibilidades.
Creating a empty PCL projectShow the dialog for choose the targetsEdit the targetsShow the subset
Be Pragmatic: Develop UX specific to the target platformDon’t attempt to share UX resources (styles, controls, pages etc)Reuse and share code between platforms[EN]Separate UI from app logic (Model-View-ViewModel)Share portable .NET code in Portable Class Library“Abstactraion patter is the key”Use common Windows Runtime API (Add as Link)Complete with platform-specific code as necessary