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.