SlideShare a Scribd company logo
1 of 21
VÝVOJ WP 7.X APLIKACÍ PRO
POKROČILÉ



René Stein
http://blog.renestein.net
http://www.twitter.com/renestein
WP7 MVVM a další radosti
 Vícevrstvá aplikace
 Místo MVVM vzoru ve vícevrstvé aplikaci
 Máme jen jednu hodinu, měli byste znát:
   Jak vypadá skeleton aplikace ve WP7
   Neplatí, že čím více vrstev, tím lepší aplikace (ani lepší
      vývojář)
     model != data (zásada neplatí v „demo“ říši Microsoftu )
     view model != cool záloha struktury doménového modelu
     view != hlavní mozek celé aplikace a přilehlého okolí
     Základní rozdíly mezi doménovým modelem, aplikačními
      službami, business službami, infrastrukturními službami
MVVM za 21 sekund !!! 
Pocta uživatelské
jednoduchosti a rychlosti
WP7
Jeden z možných životních
cyklů aplikace ve WP7(Mango)
 Spuštění aplikace (Launching)
 Aplikace běží
 Aplikace je dočasně uspána (stav dormant)
 Aplikace je „tombstonována“ – je třeba uložit tranzientní stav pro
  pozdější obnovení (stav tombstoned)
 Aplikace „detombstonována“ – je třeba nahrát dříve uložený tranzientní
  stav tak, aby si uživatel nebyl vědom, že aplikace byla uvolněna z
  paměti.
 Aplikace běží
 Ukončení aplikace (Closing)



   Zlé jazyky by dodaly, že není náhoda, že životní cyklus WP7 aplikace se
    točí kolem zombie stavů „pohřbena (zaživa)“ a „ uspána“. 
Hlavní problémy
„tombstoningu“
 Je třeba z hlediska uživatele nepozorovaně
  uložit a obnovit tranzientní stav a nedělá to
  samotný OS.
 Když obnovujete stav z
  “tombstoningu“, může dojít k opětovnému
  „tombstoningu“. K tombstonování aplikace
  může dojít kdykoli a nejste varování.
 Všechny typy ukládané jako tranzientní
  stav musí být serializovatelné!
Hlavní problémy
„tombstoningu“ II
 Když vám uložení tranzientního stavu trvá
  dlouho, dojde k vyvolání výjimky
  ThreadAbortException.
 Nemůžete uložit neomezené množství dat do
  tranzientního stavu.
 (Může vést) k opakování kódu na všech
  stránkách (ve view).
Rozhraní podporovaná
(volitelně!) view modelem
 Důležitá rozhraní
   IInitialize – inicializace view modelu
   Rozhraní IActivated a IDeactivated – reakce na
    to, jestli se stránka, se kterou je asociován view
    model, stala aktivní či neaktivní.
   ITransientStateManager – uložení a nahrání
    tranzientního stavu
   Proč máme i rozhraní s jedinou metodou? Protože
    se nám tady „interface-segregation principle “
    velmi hodí –SOLID.
(Volitelné) bázové třídy pro
view modely
 PropertyNotificationBase -
 INotifyPropertyChanged se mi nechce
 reimplementovat v každém view modelu, i
 když jedna z výchozích šablon ve WP 7 to
 dělá.
(Volitelné) bázové třídy pro
view modely ||
(Volitelné) bázové třídy pro
view modely
public abstract class ViewModelBase :
 PropertyNotificationBase, ITransientStateMana
 ger, IInitialize, IActivated, IDeactivated

 Centrální správa tranzientního stavu? ANO!
DoInternalSaveTransientState
DoInternalLoadTransientState

TransientStateHelper je odpovědný za uložení a
  obnovení tranzientního stavu. Využití reflexe.
Všechna data z VM v
tranzientním stavu? Výjimky:
Kdo řídí životní cyklus view
modelu?
 Třída PageBase.
   Tedy View???
public class PageBase : PhoneApplicationPage

 …Ale není to nutné, je možné (a lepší) napsat
  adaptér pro PhoneApplicationPage.
Co musí PageBase zvládnout
(přes další pomocné třídy!!)
 Nalezení view modelu pro view. View model
  je pro view DataContext.
 Volání metod z rozhraní
  IInitialize, IActivate, IDeactivate, ITransientSt
  ateManager , pokud je view model podporuje
 Uložení stavu, který ji view model předá.

 Znáte ViewState z WebForms? To je náš
  TransientState (pojem ViewState je prý v
  lepších vývojářských kruzích dnes tabu.)
Nalezení View modelu pro
view - IViewModelResolver
PageBase – víte, jaký stav
prozatím ignorujeme?
View složené z dalších view?
 Jedno monolitické view s jedním view modelem není
  výhodné.
 View (PageBase) může obsahoval vnořená view
  (UserControl). Ke každému view je dohledán view
  model, pokud view nemá speciální view model, dostane
  („zdědí“) view model z„nadřazeného“ view.
 Počet vnořených view není omezen ani počet zanoření.

 MainView
    HeaderView
    ContentView
         Panel1View
         Panel2View
    FooterView
Používáme naši
infrastrukturu pro view
modely a view ve WP7
 Jednoduchá přihlašovací obrazovka s
  přechodem na detail
Co bychom mohli probrat
dále?
 Navigace ve WP7 aplikacích

 Injektování závislostí do view modelů

 Uložení perzistentního stavu ve WP7 aplikacích. Stavu, který
   potřebujeme mezi různými instancemi aplikace.

       Rozhraní IUniqueHostKeyReceiver – unikátní id view modelu pro uložení
        perzistetntního stavu



 Behaviors

 ---
René Stein
Vývoj aplikací, veřejné a inhouse
kurzy
http://www.renestein.net/nabidka.aspx

http://blog.renestein.net
http://www.twitter.com/renestein



 DOTAZY?
 A MOŽNÁ ODPOVĚDI? 

More Related Content

Similar to Vývoj wp 7 aplikací pro pokročilé

Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Jaroslav Prodelal
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise AplikacíMartin Ptáček
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Tomáš Kypta
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
Microservices - morning talk
Microservices -  morning talkMicroservices -  morning talk
Microservices - morning talkJindřich Kubát
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Jaroslav Prodelal
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionJiří Matula
 
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...Vojtěch Kusý
 
WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3Vladimír Smitka
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Ondřej Machulda
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduMarketingArrowECS_CZ
 
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Jaroslav Prodelal
 

Similar to Vývoj wp 7 aplikací pro pokročilé (20)

Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací2007 Technologie Pro Tvorbu Java Enterprise Aplikací
2007 Technologie Pro Tvorbu Java Enterprise Aplikací
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Microservices - morning talk
Microservices -  morning talkMicroservices -  morning talk
Microservices - morning talk
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
 
TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
TNPW2-2012-05
TNPW2-2012-05TNPW2-2012-05
TNPW2-2012-05
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
TNPW2-2011-03
TNPW2-2011-03TNPW2-2011-03
TNPW2-2011-03
 
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...
Content Management Framework Drupal aneb 80% webu za pár hodin. Hodí se i pro...
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3WordPress: Základy - bezpečnost 3x3
WordPress: Základy - bezpečnost 3x3
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
 
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do clouduOracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
Oracle Ravello: Přesuňte si prostředí VMware & KVM do cloudu
 
Úvod do OOP
Úvod do OOPÚvod do OOP
Úvod do OOP
 
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
Chraňte svou VMware infrastrukturu prostřednictvím Veeam Backup & Replication v5
 

Vývoj wp 7 aplikací pro pokročilé

  • 1. VÝVOJ WP 7.X APLIKACÍ PRO POKROČILÉ René Stein http://blog.renestein.net http://www.twitter.com/renestein
  • 2. WP7 MVVM a další radosti  Vícevrstvá aplikace  Místo MVVM vzoru ve vícevrstvé aplikaci  Máme jen jednu hodinu, měli byste znát:  Jak vypadá skeleton aplikace ve WP7  Neplatí, že čím více vrstev, tím lepší aplikace (ani lepší vývojář)  model != data (zásada neplatí v „demo“ říši Microsoftu )  view model != cool záloha struktury doménového modelu  view != hlavní mozek celé aplikace a přilehlého okolí  Základní rozdíly mezi doménovým modelem, aplikačními službami, business službami, infrastrukturními službami
  • 3. MVVM za 21 sekund !!!  Pocta uživatelské jednoduchosti a rychlosti WP7
  • 4. Jeden z možných životních cyklů aplikace ve WP7(Mango)  Spuštění aplikace (Launching)  Aplikace běží  Aplikace je dočasně uspána (stav dormant)  Aplikace je „tombstonována“ – je třeba uložit tranzientní stav pro pozdější obnovení (stav tombstoned)  Aplikace „detombstonována“ – je třeba nahrát dříve uložený tranzientní stav tak, aby si uživatel nebyl vědom, že aplikace byla uvolněna z paměti.  Aplikace běží  Ukončení aplikace (Closing)  Zlé jazyky by dodaly, že není náhoda, že životní cyklus WP7 aplikace se točí kolem zombie stavů „pohřbena (zaživa)“ a „ uspána“. 
  • 5.
  • 6.
  • 7. Hlavní problémy „tombstoningu“  Je třeba z hlediska uživatele nepozorovaně uložit a obnovit tranzientní stav a nedělá to samotný OS.  Když obnovujete stav z “tombstoningu“, může dojít k opětovnému „tombstoningu“. K tombstonování aplikace může dojít kdykoli a nejste varování.  Všechny typy ukládané jako tranzientní stav musí být serializovatelné!
  • 8. Hlavní problémy „tombstoningu“ II  Když vám uložení tranzientního stavu trvá dlouho, dojde k vyvolání výjimky ThreadAbortException.  Nemůžete uložit neomezené množství dat do tranzientního stavu.  (Může vést) k opakování kódu na všech stránkách (ve view).
  • 9. Rozhraní podporovaná (volitelně!) view modelem  Důležitá rozhraní  IInitialize – inicializace view modelu  Rozhraní IActivated a IDeactivated – reakce na to, jestli se stránka, se kterou je asociován view model, stala aktivní či neaktivní.  ITransientStateManager – uložení a nahrání tranzientního stavu  Proč máme i rozhraní s jedinou metodou? Protože se nám tady „interface-segregation principle “ velmi hodí –SOLID.
  • 10. (Volitelné) bázové třídy pro view modely  PropertyNotificationBase - INotifyPropertyChanged se mi nechce reimplementovat v každém view modelu, i když jedna z výchozích šablon ve WP 7 to dělá.
  • 11. (Volitelné) bázové třídy pro view modely ||
  • 12. (Volitelné) bázové třídy pro view modely public abstract class ViewModelBase : PropertyNotificationBase, ITransientStateMana ger, IInitialize, IActivated, IDeactivated  Centrální správa tranzientního stavu? ANO! DoInternalSaveTransientState DoInternalLoadTransientState TransientStateHelper je odpovědný za uložení a obnovení tranzientního stavu. Využití reflexe.
  • 13. Všechna data z VM v tranzientním stavu? Výjimky:
  • 14. Kdo řídí životní cyklus view modelu?  Třída PageBase.  Tedy View??? public class PageBase : PhoneApplicationPage  …Ale není to nutné, je možné (a lepší) napsat adaptér pro PhoneApplicationPage.
  • 15. Co musí PageBase zvládnout (přes další pomocné třídy!!)  Nalezení view modelu pro view. View model je pro view DataContext.  Volání metod z rozhraní IInitialize, IActivate, IDeactivate, ITransientSt ateManager , pokud je view model podporuje  Uložení stavu, který ji view model předá.  Znáte ViewState z WebForms? To je náš TransientState (pojem ViewState je prý v lepších vývojářských kruzích dnes tabu.)
  • 16. Nalezení View modelu pro view - IViewModelResolver
  • 17. PageBase – víte, jaký stav prozatím ignorujeme?
  • 18. View složené z dalších view?  Jedno monolitické view s jedním view modelem není výhodné.  View (PageBase) může obsahoval vnořená view (UserControl). Ke každému view je dohledán view model, pokud view nemá speciální view model, dostane („zdědí“) view model z„nadřazeného“ view.  Počet vnořených view není omezen ani počet zanoření.  MainView HeaderView ContentView  Panel1View  Panel2View FooterView
  • 19. Používáme naši infrastrukturu pro view modely a view ve WP7  Jednoduchá přihlašovací obrazovka s přechodem na detail
  • 20. Co bychom mohli probrat dále?  Navigace ve WP7 aplikacích  Injektování závislostí do view modelů  Uložení perzistentního stavu ve WP7 aplikacích. Stavu, který potřebujeme mezi různými instancemi aplikace.  Rozhraní IUniqueHostKeyReceiver – unikátní id view modelu pro uložení perzistetntního stavu  Behaviors  ---
  • 21. René Stein Vývoj aplikací, veřejné a inhouse kurzy http://www.renestein.net/nabidka.aspx http://blog.renestein.net http://www.twitter.com/renestein DOTAZY? A MOŽNÁ ODPOVĚDI? 