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é

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 injection
Jiří Matula
 

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? 