Silverlight 3.0: potřebujeme ještě WPF?
K zamyšlení nad touto otázkou mne o víkendu přiměl Honza Martinovič, jeden z autorů úžasného systému pro modelování, predikci, monitorování a pro podporu zvládání krizových situací - programu Floreon+ (aktuální stav povodní je pod obrázkem metru, aktuální stav dopravy hned vedle).
Kompletní UI aplikace má webový charakter a v současné době využívá technologii Silverlight 2.0. Při diskusi nad dalším vývojem aplikace jsme také narazili na potřebu mít i desktopového klienta s možností spuštění i bez internetové konektivity. Nedalo mi to, abych nezmínil jednu z novinek v Silverlight 3.0 - možnost si aplikaci nainstalovat lokálně. Honza byl evidentně touto novinkou velmi příjemně překvapen, ale hned mi vrátil úder "znamená to, že WPF odsouváte na druhou kolej a veškerý vývoj dnes bude v Silverlightu?".
Souboj platforem?
Pojďme si tedy rozebrat jak to vlastně Microsoft s Windows Presentation Foundation (WPF) a Silverlight (SL) myslí. Na začátek je si třeba říci, že Silverlight není přímou podmnožinou WPF, tak se často říká. Lepší definicí je - Silverlight je podmnožinou .NET Frameworku. WPF je jednou ze součástí "velkého" .NET frameworku (vedle WCF, WF a CardSpace) a je určen k realizaci uživatelského rozhranní aplikace. SL vedle toho nese celý framework sebou, tak aby mohl být provozován nezávisle na operačním systému a prohlížeči.
Jak napovídá toto krátké srovnání, rozdíly mezi WPF a SL jsou zejména v dostupnosti a bohatosti API, které máme k dispozici, podporované množině platforem a velikosti instalace. Pokusím se tyto rozdíly a výhody obou technologií srovnat vedle sebe.
Výhody WPF oproti SL
- Plný přístup k veškerému Windows API
- přímo přes řízené .NET API nebo
- přes P/Invoke nebo COM Interop, pokud funkce nemají ekvivalent v .NET knihovnách.
- Od počátku připraven pro offline scénář
- pro případnou synchronizaci lze využít Sync Framework nebo
- SQL Express a SQL Server Compact
- Snadná integrace s jinými UI technologiemi
- WPF komponenty lze použít MS Office nebo naopak
- WPF lze hostovat ve Winform aplikaci a Winform ovládací prvky použít ve WPF aplikaci
- WPF aplikace může hostovat ActiveX prvky
- Snadná integrace s různými typy datových zdrojů
- Plná podpora tisku
- UI a datová vizualizace (od verze 3.5 sp1)
- Možnost definice sandboxu
- Hardwarová akcelerace a podpora 3D
Výhody SL oproti WPF
- Malý runtime (4MB) a krátká doba instalace bez restartu
- po instalaci je automaticky upgradován pomocí služby Windows Update
- v kombinaci s IE8 není nutné pro instalaci elavace práv
- lze jednoduše nasadit v logon skriptu nebo GPO
- Aplikace se nemusí být lokálně nasazeny
- jsou ale umístěny do cache (do browser cache nebo do Out-of-browser cache)
- Multiplatformní technologie
- Microsoft Windows 2000, XP, Vista, 2003, 2008, 7
- Mac OS
- Linux (projekt Moonlight), dnes ve verzi 2.0
- Snadnější naučení díky menší množině funkcí a velikosti API
- Lze integrovat do libovolných existujících web stránek nezávisle na použité serverové technologii (ASP.NET, PHP, JSP, .)
- Má plný přístup k DOM stránky v prohlížeči
- Je plně skriptovatelný v celé řadě jazyků (JavaScript, PHP, Python, C#, Visual Basic, .)
- Stejná aplikace může běžet v prohlížeči ale i mimo něj
- WPF aplikace může v prohlížeči běžet také, ale vyžaduje IE nebo FF a Windows OS s plnou instalací .NET Frameworku. Naví pro prohlížeč je nutné aplikaci mírně upravit.
- .NET RIA Services zjednodušují vývoj tradičních n-vrstvých aplikací na SL platformě
- později bude dostupné i pro WPF
- Zpřístupňuje komponenty jako DataForm, Activity a Validation Framework
Omezení SL ve verzi 3.0
- Neexistuje přímá podpora tisku
- dokumenty, např. ve formě OpenXML, XPS nebo PDF je nutné generovat na serveru a poslat zpět klientovi ke stažení
- Případně generovat HTML přímo na klientovi
- Neexistuje přizpůsobení sandboxu
- Nelze volat API funkce jiné než SL (P/Invoke, COM interop, .NET API)
- Bez integrace s Office
- Podpora offline scénáře
- SL 3.0 může běžet mimo prohlížeč, ale oproti WPF má omezené prostředky pro synchronizace dat
- Offline data ukládána pouze do Isolated Storage
- Bez podpory Sync Frameworku a SQL
- Omezená podpora komunikačních protokolů
- Pouze HTTP/SOAP Basic profile 1.1
- Menší možnosti zabezpečení komunikace
- Transport security with Message Credential
- nejsou podporovány WS-*, TCP, .
- Podporuje Sockets support a Duplex over HTTP
- Nově ve verzi 3.0 má Binary Formatter over HTTP
- Pouze Asynchronní komunikace
- Bez podpory kliku pravého tlačítka myši
Neočekávejte vítěze
Opravdu neexistuje, mluvím o vítězi tohoto platformového souboje. WPF i Silverlight jsou strategickými platformami Microsoftu pro tvorbu bohatého uživatelského rozhraní. Jsou velice podobné na úrovni zdrojového kódu a předpokládám, že tato podobnost bude do budoucna ještě větší. Velkým přínosem je možnost vyvářet komponenty, které jsou určeny pro oba typy aplikací. Neočekávejme však, že v brzké době bude možné projekty jednoduše mezi oběma platformami bez dodatečné práce snadně převádět.
Jaký je váš názor? Jak vidíte použití obou technologií ve svých projektech? Napište nám svůj názor.
Dalibor Kačmář, Platform Strategy Advisor
PS: V pondělí se můžete těšit na obsáhlý přehled novinek v Silverlight 3.0 :-)
Comments
Anonymous
July 09, 2009
Pěkné shrnutí; jen ty nadpisy mi přijdou takové zvláštní - nemělo by to mýt spíše "Silverlight vs. velký .NET FW"? Silverlight vnímám totiž jako podmnožinu velkého .NET FW, přičemž SilverLight používá jako primární GUI framework podmnožinu WPF z velkého .NET FW. Jinými slovy Silverlight obsahuje základní obecné věci z velkého .NET FW + velkou podmnožinu WPF. Osobně kdybych měl dělat desktop aplikaci s GUI ve WPF, koncipoval bych ji tak, aby šla příp. nasadit i jako Silverlight aplikace, tj. vyvarovat se některým věcem, které nejsou v Silverlightu nestupné...Anonymous
July 09, 2009
Ano, vnímáte to dobře, také jsem to tak napsal. Ten napis je spíše reakcí na to, co občas slýchavam od lidí na konferencích nebo diskusích. Pokud jde o desktop aplikaci, tak bych se asi ve WPF neomezoval na "Silverligh podmnožinu funkcí". Trochu by mi to připomínalo přístup k programovámí jednoho mého kamaráda. Před mnoha lety, kdy začal jazyk C++ hodně nabývat na schopnostech, on tvrdošíjně programoval podle normy v ANSI C. Když jsem se ho zeptal proč, řekl, že by jednou mohl chtít portovat kód na jeden z našich UNIXů, kde bylo právě jen ANSI C. Prakticky to nakonec udělal jen ve zlomku případů. Ale víte jak se v tom C-čku nadřel? Co tím chci říci je, že nemá cenu asi všechny aplikace psát přenositelné na všechny strany. Obdobnou diskusi by jsme mohli vést i o Windows Mobile a jeho .NET Compact Framework. Pokud však vím, že aplikaci budu chtít určitě nebo s vysokou pravděpodobností portovat z WPF na SL, tak možná jistá "optimalizace" je na místě.
- Dalibor
Anonymous
July 10, 2009
Ryze desktopová aplikace - WPF Webová aplikace - Silverlight Povolení OoB u SL aplikace asi záleží na tom, jaké povahy SL aplikace je. Pokud by korektně fungovala i v offline módu, tak bezproblému. Pokud by korektně fungovala jen v online módu (potřeba dat z internetu), pak by se mělo asi myslet na upozornění uživateli, že aplikace korektně funguje jen když je přístup k internetu. S tou HW akcelerací. SL 3 by měl podporovat GPU akcelaraci? Alespoň v Betě už podpora byla, která se zapínala na úrovni pluginu. A v určitých aplikacích pořádně pomohla procesoru k oddychu ...Anonymous
July 10, 2009
Mimochodem, je škoda, že Silverlight 3 Tools for Visual Studio 2008 neumožňuje Preview mód.Anonymous
July 11, 2009
Davidovi: OoB aplikace musí být na běh v offline módu připravena. Zejména tehdy, kdy pracuje s nějakými daty přes webové služby, RSS feedem apod. Naštěstí SL 3.0 poskytuje identifikaci online/offline režimu a aplikace může na tento stav odpovídajícím způsobem reagovat. Pokud jde o GPU akceleraci, tak je podporována, ale implicitně vypnuta a je nutné zapnout. Děje se tak na úrovni tagu <object> parametrem <param name="EnableGPUAcceleration" value="true" />. Existují ale i další techniky, kterými leze běh aplikace zrychlit a procesoru ulehčit Bitmapová cache nebo Cache vizualizace. Ale o tom detailněji až příště.
- Dalibor
Anonymous
July 13, 2009
Dalibor: Nemyslel jsem to tak, že bych non-SL věci nepoužíval, ale aplikaci bych se snažil strukturovat tak, aby z ní mohl non-SL záležitosti vyjmout. Samozřejmě jen u aplikací, kde to má smysl...Anonymous
July 13, 2009
S tím se nedá než souhlasit. Věřím, že časem vznikne celá řada projektů jako .NET RIA Services dostupné pro obě platformy a tím umožní psát lépe přenositelný kód. Jinak celá řada výrobců vyrábí kompomenty pro oba typy aplikací, takže je jednodušší vytvořit identické aplikace. Podívejte se třeba na http://demos.telerik.com .Tady je SL verze http://demos.telerik.com/silverlight/salesdashboard/ a tedy WPF (XBap aplikace - WPF běžící v prohlížeči bez nutnosti instalace) http://demos.telerik.com/wpf/salesdashboard/
- Dalibor