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
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:
Agenda
• Introdução

• Partilha de ficheiros de código

• Portable Class Library

• Portable Class Library + MVVM

• Bibliotecas

• Conclusão
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
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.
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.”
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
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
Partilha de ficheiros de código
Exemplo do toolkit MVVM Light:
“Add as Link”
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
Portable Class Library
Funcionalidades suportadas nas várias plataformas*:




       * .Net Framework superior ou igual a 4.0.3
Portable Class Library
A documentação no MSDN informa sobre suporte:
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
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!”
Portable Class Library Project
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" />
Portable Class Library + MVVM
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
Consumindo Serviços Odata
Arquitetura




  *only external portable libraries
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
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!
Questões?
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
Patrocinador “GOLD”




  Twitter: @PTMicrosoft http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
Próximas reuniões presenciais
• 23/02/2013 – Fevereiro (Lisboa)
  16/03/2013 – Março (Lisboa)

 Reserva estes dias na agenda! :)
Obrigada!
Sara Silva
geral@saramgsilva.com

http://www.saramgsilva.com
http://twitter.com/saramgsilva
http://pt.linkedin.com/in/saramgsilva
http://www.facebook.com/saramgsilva

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 • Partilhade 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 repetidoentre 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 ficheirosde 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 ficheirosde 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 ficheirosde 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
  • 9.
    Partilha de ficheirosde código Exemplo do toolkit MVVM Light:
  • 10.
  • 11.
    Portable Class Library Maisvalia 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
  • 12.
    Portable Class Library Funcionalidadessuportadas nas várias plataformas*: * .Net Framework superior ou igual a 4.0.3
  • 13.
    Portable Class Library Adocumentação no MSDN informa sobre suporte:
  • 14.
    Portable Class Library OVisual 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 OVisual 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!”
  • 16.
  • 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" />
  • 18.
  • 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
  • 20.
  • 21.
    Arquitetura *onlyexternal portable libraries
  • 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!
  • 24.
  • 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
  • 26.
    Patrocinador “GOLD” Twitter: @PTMicrosoft http://www.microsoft.com/portugal
  • 27.
  • 28.
  • 29.
    Próximas reuniões presenciais •23/02/2013 – Fevereiro (Lisboa) 16/03/2013 – Março (Lisboa) Reserva estes dias na agenda! :)
  • 30.

Notas do Editor

  • #11 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
  • #13 Quandocombinamos com .Net 4.0 e WP7 vamosencontrarmaisincompatibilidades.
  • #17 Creating a empty PCL projectShow the dialog for choose the targetsEdit the targetsShow the subset
  • #24 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