vývoj wp 7 aplikací pro pokročilé
TRANSCRIPT
VÝVOJ WP 7.X APLIKACÍ PRO POKROČILÉ
René Stein
http://blog.renestein.nethttp://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 viewmodel, stala aktivní či neaktivní.
ITransientStateManager – uložení a nahrání tranzientního stavu
Proč máme i rozhraní s jedinou metodou? Protožese 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, ITransientStateManager, IInitialize, IActivated, IDeactivated
Centrální správa tranzientního stavu? ANO!DoInternalSaveTransientStateDoInternalLoadTransientState
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 viewmodelu? 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, ITransientStateManager , 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 viewmodel, 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í.
MainViewHeaderViewContentView
Panel1View Panel2View
FooterView
Používáme naši infrastrukturu pro viewmodely 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
---
DOTAZY?A MOŽNÁ ODPOVĚDI?
René SteinVývoj aplikací, veřejné a inhousekurzyhttp://www.renestein.net/nabidka.aspx
http://blog.renestein.nethttp://www.twitter.com/renestein