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