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