Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 173, comments - 300, trackbacks - 196

WPF Prism Design Concepts Part 4: Multi Targeting

Eccoci arrivati all’ultima parte di questa mini-serie di articoli sui design concepts di Prism. in questo articolo andremo a scoprire cos’è il Multi-Targeting. Con il termine Multi-Targeting si intende quell’insieme di regole e strumenti che permettono di riutilizzare lo stesso codice sorgente su più piattaforme. Nel nostro caso, le piattaforme sono WPF e Silverlight. Queste due tecnologie, come è noto, non sono “binary compatible”, ovvero una dll compilata “per WPF” non può girare in una applicazione Silverlight e viceversa. L’unica possibilità che ci è concessa, quindi, è quella di avere lo stesso codebase che a seconda della piattaforma scelta in fase di compilazione utilizza determinate references piuttosto che altre.

Una delle sfide più grandi nell’approccio muti-target, è la sensibile differenza esistente tra le due piattaforme WPF e Silverlight, che pur condividendo parecchi aspetti, sono in effetti molto differenti. Alcuni delle differenze più importanti sono:

  • Silverlight è un “sottoinsieme proprio” di WPF; quando si vuole sviluppare un’applicazione che funzioni su entrambe le piattaforme, bisognerà allinearsi al feature-set più limitato, ovvero a Silverlight.
  • Silverlight non supporta la modalità “offline”, ovvero è nato e pensato per essere supportato da un browser. WPF, di contro, vive in modalità stand-alone.
  • Silverlight offre solo un supporto limitato all’immagazzinamento locale dei dati; questo è dovuto al fatto che le applicazioni Silverlight girano in una cosiddetta “Sandbox” che non consente tutta la libertà di manovra di un’applicazione WPF
  • Se, per qualche motivo, la nostra applicazione supporta solo le comunicazione sincrone con servizi, questo può essere un problema, in quanto Silverlight supporta solamente chiamate asincrone ai servizi web
  • Rendere il codice multi-target rischia sempre di renderlo meno leggibile e più caotico

In effetti, nelle nostre applicazioni modulari realizzate con Prism ci sono delle parti che sono “facilmente” multi targetable, mentre delle altre non lo sono affatto. Tra le parti multi-targetable possiamo trovare:

  • Presenters
  • Controllers
  • Models
  • Services
  • Tests
  • Views (solo quelle più semplici, in cui lo XAML utilizzato sia compatibile tra WPF e Silverlight)

Sono difficilmente portabili, a causa delle differenze presenti tra WPF e Silverlight:

  • Views complesse
  • Animazioni
  • Controlli
  • Stili

Conclusioni

Personalmente, ritengo che il compito di rendere multi targetable un’applicazione basata su Prism sia molto oneroso, e sia giustificabile solo in caso si assoluta necessità. I trade-off da accettare sono molti, il più pesante rappresentato da un’effettiva impossibilità di usare tutte le caratteristiche di WPF, dovendosi obbligatoriamente uniformare al feature-set offerto da Silverlight.

Print | posted on lunedì 27 luglio 2009 10.05 |

Feedback

Gravatar

# re: WPF Prism Design Concepts Part 4: Multi Targeting

>Silverlight non supporta la modalità “offline”
Ciao Davide, ma con la versione 3 non è stata aggiunta questa possibilità?
27/07/2009 10.18 | Leonardo
Gravatar

# re: WPF Prism Design Concepts Part 4: Multi Targeting

Se stai parlando della modalità Out-Of Browser, in un certo senso le applicazioni Silverlight possono essere "sganciate" dal browser ed utilizzate in una modalità pseudo stand-alone (se sei interessato ecco un bellissimo articolo msdn.microsoft.com/en-us/magazine/dd882515.aspx).
Il punto è che comunque concettualmente un'applicazione sviluppata con WPF è diversa e permette un'interazione totale con la macchina che la ospita (è un client a tutti gli effetti). Ad esempio con Silverlight per salvare le impostazioni locali devi usare l'isolated storage, mentre con un client in WPF puoi scegliere tu come e dove salvare i tuoi dati locali.
Comunque la tua osservazione è giusta e dovrebbe far pensare a tutti se (o forse quando...) le due tecnologie convergeranno definitivamente...
27/07/2009 10.46 | info@codesapiens.net

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 8 and 7 and type the answer here:

Powered by: