24 messaggi dal 16 febbraio 2007
Negli ultimi giorni ho cercato di documentarmi e di capire qualcosa di più su silverlight. Argomento molto vasto e complesso per chi, come me, è agli inizi e cerca di capire e prendere spunto da chi ne sa molto di più. Nonostante le molte pagine lette e le decine di esempi scaricati e debuggati mi sono sorti alcuni dubbi.

Ipotizzando di dover creare un gestionale (uso come esmpio il gestionale perchè è il mio ambito di lavoro) e volendolo realizzare in silverlight mi sono chiesto quale sarebbe l'architettura migliore (o più corretta). Credo che l'accoppiata MVVM e Ria Services siano una buona base di partenza (correggetemi se sbaglio).
Un gestionale però è costituito da decine di pagine ed ha una logica, a volte, molto complessa.

Racchiudere tutto in un singolo xap non credo che sia la soluzione migliore. Le dimensioni dello xap potrebbero anche essere notevoli il che comporterebbe tempi di attesa (anche lunghi) prima che l'applicazione sia disponibile. Inoltre racchiudere tutto in uno xap significherebbe scaricare tutto per, magari, usarne solo una parte (se ad esempio un utente volesse solamente consultare l'anagrafica cliente non ha senso scaricare tutto il gestionale).

La mia idea era quella di creare uno xap principale (main) da cui scaricare, ad esempio, lo xap dell'anagrafica clienti per poi visualizzarne le pagine. In questo modo l'applicazione main sarebbe molto più "leggera" e l'utente scaricherebbe solo quello di cui ha bisogno senza perdite di tempo.

Cercando in giro ho visto che si parla molto di Mef. Sfortunatamente non sempre gli esempi sono chiari e funzionano (anche se seguiti alla lettera).

Vorrei quindi sapere qual'è, almeno teoricamente, l'architettura corretta da utilizzare in un progetto silverlight. Considerando anche il fatto che tra xap secondari talvolta è necessario un "dialogo" (ad es. dalla lista dei clienti l'utente può voler visualizzare i documenti emessi per un determinato cliente)

Grazie

Luca
Nulla ti vieta di strutturare la tua applicazione come faresti normalmente per un modello winform. Hai ragione, inserendo tutto il codice in un unico xap otterresti un file mastodontico, quindi non è la via giusta. Nulla ti vieta però di creare una serie di class library per Silverlight con all'interno tutti i controlli che ti servono (magari divisi per aree logiche) e poi usare uno xap "principale" per gestirne dinamicamente il caricamento (download prima, caricamento in memoria dei tipi esposti dopo).

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
"caluse" <caluse> wrote in message
news:364740@...
Negli ultimi giorni ho cercato di documentarmi e di capire qualcosa di più su silverlight. Argomento molto vasto e complesso per chi, come me, è agli inizi e cerca di capire e prendere spunto da chi ne sa molto di più. Nonostante le molte pagine lette e le decine di esempi scaricati e debuggati mi sono sorti alcuni dubbi.
Ipotizzando di dover creare un gestionale (uso come esmpio il gestionale perchè è il mio ambito di lavoro) e volendolo realizzare in silverlight mi sono chiesto quale sarebbe l'architettura migliore (o più corretta). Credo che l'accoppiata MVVM e Ria Services siano una buona base di partenza (correggetemi se sbaglio).
Sì, il rispetto del pattern MVVM è quasi indispensabile nello sviluppo di applicazioni WPF/Silverlight/WP7, quindi è una scelta che consiglio. Utilizzato WCF Ria Services risparmi molto tempo nell'implementazione dello strato di servizi ed in generale nell'accesso ai dati appoggiandoti a EF. Tuttavia, prima di sceglierne l'adozione, ti consiglio di approfondire e di fare qualche test mirato agli aspetti chiave del tuo gestionale, in modo da ridurre le sorprese. Ti dico questo perchè WCF Ria Services è un bel "mini-framework" ma ovviamente per ridurci i tempi di sviluppo ha i propri limiti che è bene conoscere per "aggirarli" senza impazzire a sviluppo avviato (riducendo quindi i possibili allungamenti di tempo).
Un gestionale però è costituito da decine di pagine ed ha una logica, a volte, molto complessa.
Racchiudere tutto in un singolo xap non credo che sia la soluzione migliore. Le dimensioni dello xap potrebbero anche essere notevoli il che comporterebbe tempi di attesa (anche lunghi) prima che l'applicazione sia disponibile. Inoltre racchiudere tutto in uno xap significherebbe scaricare
tutto per, magari, usarne solo una parte (se ad esempio un utente volesse solamente consultare l'anagrafica cliente non ha senso scaricare tutto il gestionale).
La mia idea era quella di creare uno xap principale (main) da cui scaricare, ad esempio, lo xap dell'anagrafica clienti per poi visualizzarne
le pagine. In questo modo l'applicazione main sarebbe molto più "leggera" e
l'utente scaricherebbe solo quello di cui ha bisogno senza perdite di tempo.
Cercando in giro ho visto che si parla molto di Mef. Sfortunatamente non sempre gli esempi sono chiari e funzionano (anche se seguiti alla lettera).
Vorrei quindi sapere qual'è, almeno teoricamente, l'architettura corretta da utilizzare in un progetto silverlight. Considerando anche il fatto che tra xap secondari talvolta è necessario un "dialogo" (ad es. dalla lista dei clienti l'utente può voler visualizzare i documenti emessi per un determinato cliente)
Per dividere l'applicazione hai tre possibilità: MEF, PRISM o caricare semplicemente gli XAP all'occorrenza ed istanziare gli UserControl in esso contenuti. Quest'ultima soluzione (illustrata nel nostro script #25) è la più semplice ma richiede molto codice "manuale", se invece usi gli altri due framework hai più funzionalità e sono decisamente più "robusti". Ovviamente richiedono un po' di studio, ma ne verresti ripagato col tempo perchè la manutenibilità di un progetto che usa MEF o PRISM è decisamente migliore. Comunque sia, per la comunicazione puoi fare in modo che i "moduli" rispettino delle interfacce condivise oppure (e te lo consiglio) usare il patter Mediator di cui trovi una sorta di implementazione nell'MVVM Light Toolkit di GalaSoft e anche nell'EventAggregator di PRISM (in pratica, semplificando, i moduli non si conoscono e si scambiano dati con messaggi).

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
24 messaggi dal 16 febbraio 2007
Grazie a Mizrael e Novecento per aver risposto.
Cercherò di documentarmi a fondo sia sul MVVM sia su come "dividere" un'appliazione silverlight. In particolare cercherò di conectrarmi sul MVVM toolkit di Galasoft e Ria Services segnalati da Novecento.

Credo che dubbi come i miei siano comuni a molti quindi se avete link utili o consigli su manuali da leggere sono graditi.

Grazie

Luca
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
"caluse" <caluse> wrote in message
news:365173@...
Grazie a Mizrael e Novecento per aver risposto.
Cercherò di documentarmi a fondo sia sul MVVM sia su come "dividere" un'appliazione silverlight. In particolare cercherò di conectrarmi sul MVVM
toolkit di Galasoft e Ria Services segnalati da Novecento.
Credo che dubbi come i miei siano comuni a molti quindi se avete link utili
o consigli su manuali da leggere sono graditi.
Grazie
Luca
Potresti leggere
http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf.aspx e http://www.winfxitalia.com/articoli/presentation-foundation/architettura-model-view-viewmodel-wpf-problemi-comuni.aspx con quasi tutti i concetti validi per Silverlight.
Se ti interessa guardare un'applicazione completa, puoi scaricare il codice di ModelVirtualCasting (http://modelvirtualcasting.codeplex.com/): l'applicazione che abbiamo sviluppato negli ultimi eventi. Nella parte di back office in Silverlight puoi vedere l'uso di Ria Service in architettura MVVM.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
24 messaggi dal 16 febbraio 2007
Grazie per i link. Ho letto gli articoli ed ho fatto qualche prova.
Molto interessanti e sicuramente c'è molto da imparare.
Quello che però mi "sfugge" è capire come usare MEF o Prism per "scaricare" un xap visualizzarlo.
Ho cercato e ho visto che si fa ampio uso di [Import] ed [Export], che si instanziano riferimenti a system.componentmodel.composition etc.
Ho fatto questa prova:
1) Ho creato un progetto silverlight 4 e l'ho chiamato "Main.xap"
2) Ho creato un progetto silverlight 4 e l'ho chiamato "Clienti.xap"
3) Ho aggiunto i riferimenti a "System.ComponentModel.Composition" in entrambi i progetti
4) Nel progetto "Main.xap" ho aggiunto un riferimento a "Clienti.xap" ed ho impostato CopyLocal = false
5) Nella "MainPage.xaml.cs" del progetto "Clienti.xap" ho aggiunto
[Export(typeof(UserControl))]
5) Nella "MainPage.xaml.cs" del progetto "Main.xap" ho aggiunto
[Import]
public Clienti.MainPage clienti { get; set; }

A questo punto però (se quello che ho fatto sino ad ora è corretto) mi sfugge come proseguire.

Grazie
24 messaggi dal 16 febbraio 2007
Seguendo questo esempio http://www.codeproject.com/KB/silverlight/MEFDynamicLoading.aspx?msg=3579118 sono riuscito più o meno a concludere qualcosa. Sono riuscito a gestire l'MVVM e a fare il download dell'xap.
Secondo voi, sicuramente più competenti di me in materia, è un approccio corretto o no?
Ho guardato anche su http://mef.codeplex.com/wikipage?title=DeploymentCatalog&referringTitle=Guide ma la cosa non è molto chiara, almeno per me.

Grazie come sempre per le risposte e i consigli

Buon week end a tutti.

Luca
2 messaggi dal 21 ottobre 2008
Ciao Luca,
È sicuramente corretto, il DeploymentCatalog è l'approccio consigliato per il download dinamico via MEF.
Se vuoi dare un'occhiata ho un ulteriore esempio qui:
http://www.davidezordan.net/blog/?p=2025

HTH,

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.