MIX10 a MVVM framework
Podle zájmu shlížím jednotlivé přednášky z letošní konference MIX10 a jedna z těch vydařených se jmenovala “Build Your Own MVVM Framework” od Rob Eisenberg. Určitě stojí za pozornost a abych vás maličko nalákal, tady je takové krátké shrnutí.
Co doporučím nejdříve, je stáhnout si nejen samotné video, ale také ukázkové kódy, na kterých Rob celou svoji přednášku demonstroval vytvoření a použití Mini MVVM Frameworku. Pokud ještě stále nevíte, kdo k vám bude promlouvat, je to architekt projektu Caliburn, což je WPF/Silvertligh presentation development framework.
Mini MVVM framework právě vychází z projektu Caliburn a je uzpůsoben tak, aby šel odprezentovat právě za jednu hodinu. I díky tomu se setkáme ve frameworku se způsoby, které bychom si možná normálně odpustili a jsou vhodné pouze pro menší projekty. Některé naopak můžeme směle využít i u rozsáhlejších projektů.
Jak sám Rob v přednášce zmiňuje, samotný framework se vešel do nějakých 500 řádků kódu a já jen dodám, že až na tři třídy (soubory), tak všechny soubory nemají více jak 1kB. Většinou se jedná o deklaraci nebo implementaci jednoduchého rozhraní.
Poslední věc, kterou bych rád zmínil dříve, než se vrhnu do samotného rozboru frameworku je, že pro vyzkoušení budete potřebovat minimálně VS2010RC s doinstalovanou podporou pro Silverlight 4 RC a Silverlight toolkit (použil jsem Silverlight 4 Beta Toolkit).
S čím se tedy můžeme setkat.
Na prvním místě je třeba zdůraznit, že framework upřednostňuje naming convention před konfigurací, takže View a ViewModel musí dodržovat shodné pojmenování. Při konstrukci View je pak z názvu typu odstraněno slovo Model a View je vytvořeno pomocí reflexe. Z toho nám vyplývá, že je upřednostňován tzv. ViewModel first přístup.
Jak už jste jistě z předchozích příspěvků zaznamenali, vývoj pomocí MVVM znamená téměř žádný kód v code behind, toho se drží i tento mini MVVM framework. Zároveň při vývoji nejsou použité behaviors, které je možné využít v případě, že vyvíjíte pro Silverlight.
Co však určitě překvapí, že není použit XAML data binding. To však neznamená, že by data binding nebyl použit vůbec, ale svázání dat pomocí bindingu je provedeno v runtime na základě naming convention.
Obdobně je pak provedeno svázání příkazů ICommand tedy pouze využitím shodného pojmenování elementu v XAML a shodně nazvané metody ve ViewModelu.
Samozřejmě nesmím zapomenout na to, jakým způsobem jsou “vyzývány” jednotlivé View do hry a to pomocí ScreenConductor třídy.
Co ovšem určitě stojí za pozornost je elegance a vtipnost řešení, jak vytvořit async pattern pro zpracování úloh.
Závěrem
Určitě se jedná o jednu z nejlepších přednášek, kterou jsem zatím z MIX10 viděl a jednu z těch hodně povedených, které se věnují tématu Model-View-ViewModel prezentačnímu návrhovému vzoru. Vřele tedy doporučím udělat si tu hodinku čas a přednášku shlédnout.
Souhlas, je to excelentní přednáška. "Conventions over configurations" mě hodně oslovilo a mockrát jsem se zastyděl, proč už "mě tohle už dávno nenapadlo". Eisenbergův Mini Framework dotahuje k dokonalosti ideu "MVVM znamená téměř žádný kód v code behind" až k "Mini MVVM znamená žádný kód v code behind".