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

Post on 04-Jul-2015

11.366 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

---

top related