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

21
VÝVOJ WP 7.X APLIKACÍ PRO POKROČILÉ René Stein http://blog.renestein.net http://www.twitter.com/renestein

Upload: rene-stein

Post on 04-Jul-2015

11.366 views

Category:

Documents


2 download

TRANSCRIPT

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

VÝVOJ WP 7.X APLIKACÍ PRO POKROČILÉ

René Stein

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

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

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

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

MVVM za 21 sekund !!!

Pocta uživatelské jednoduchosti a rychlosti WP7

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

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“.

Page 5: Vývoj wp 7 aplikací pro pokročilé
Page 6: Vývoj wp 7 aplikací pro pokročilé
Page 7: Vývoj wp 7 aplikací pro pokročilé

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é!

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

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).

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

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.

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

(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á.

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

(Volitelné) bázové třídy pro view modely ||

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

(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.

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

Všechna data z VM v tranzientním stavu? Výjimky:

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

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.

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

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.)

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

Nalezení View modelu pro view - IViewModelResolver

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

PageBase – víte, jaký stav prozatím ignorujeme?

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

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

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

Používáme naši infrastrukturu pro viewmodely a view ve WP7

Jednoduchá přihlašovací obrazovka s přechodem na detail

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

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

---