Architettura di una soluzione Mobile e...

Obiettivo
FWC 2006 si propone l’obiettivo di mostrare tutto il codice di un’applicazione completa, scritta con .NET CF 2.0 che si appoggia a SQL 2005 Mobile Edition, SQL Server 2005, MSMQ, Web Service seguendo lo schema che DevLeap utilizza per lo svilluppo di applicazioni reali.

Spiegheremo il perché delle scelte, i pro e i contro di ogni soluzione.

Tutto il codice (tranne alcune parti specifiche dell’ambiente mobile) e le idee che affronteremo durante la giornata si applicano anche ad applicazioni Desktop e applicazioni ASP.NET.

Anche chi non sviluppa applicazioni mobile troverà molti argomenti di suo interesse. In fondo .NET e .NET CF si assomigliano molto.
Inoltre la filosofia di sviluppo su Layer con interfacce e classi factory intelligenti è assolutamente identica.

Tutto il codice della soluzione verrà reso disponibile al download per i partecipanti.

Perché una giornata così?
Nel 2005 e inizio 2006 molte aziende si sono affacciate al mondo mobile;
i device basati su Windows Mobile  sono sempre più pervasivi, grazie anche alle conversioni di Palm e Psion, e utilizzati sia in ambito industriale che in ambito consumer.
Spesso quando si pensa al “mondo mobile” si immagina il Pocket PC da taschino o lo SmartPhone: in realtà Windows CE, nelle sue varie versioni, è la base di molti device industriali che integrano schede wi-fi, bluetooth e lettori di bar-code.
La tecnologia e gli strumenti di sviluppo hanno raggiunto un grado di stabilità notevole e sono sempre più semplici da usare: dalla teoria alla pratica, però, spesso il passo è lungo.

Dalle demo che con 3 click compongono una griglia, dai frammenti di codice che si trovano sui siti, alla realtà delle applicazioni che girano su ambienti con constraint veramente ristretti (ogni processo .NET ha uno spazio di 32MB di RAM a prescindere dalla dimensione della RAM fisica del device, non c’è disco fisso e nessuna memoria virtuale) il passo è veramento molto lungo.

In particolare vedremo:
1) L’architettura in dettaglio della soluzione e dei componenti
2) I vari layer applicativi che formano l’applicazione rendendo indipendenti i vari strati a successive versioni della tecnologia o più semplicemente modifiche nei componenti
3) Le interfacce definite per rendere consistenti i vari layer applicativi
4) Le classi factory per l’accesso ai dati e le comunicazioni verso service (non necessariamente Web Service)
5) L’utilizzo di classi helper per l’accesso ai dati che semplificano l’utilizzo di tecniche molto efficienti di accesso ai dati come SqlCeResultSet e soprattutto Base Table Cursor di SQLCE/Sql 2005 Mobile
6) L’utilizzo dei generics che consentono di semplificare notevolmente il codice da scrivere per trattare diverse entità applicative
7) La gestione multithread dell’interfaccia utente per sfruttare “tempi morti” e l’inizializzazione in background di qualunque “oggetto pesante”
8) L’utilizzo di uno strato di gestione dell’interfaccia utente che rende indipendente l’utilizzo delle applicazioni su versioni diverse di Windows CE e su schermi di dimensioni diverse
9) L’integrazione del codice .NET con Pocket Outlook, SMS, System event e Notification per sfruttare tutte le novità dei device basati su Windows Mobile 5.0
10) Codice e idee (punto 5 e 9 a parte) che può essere utilizzato anche per progetti desktop dove la divisione logica in layer, l’utilizzo di class factory, interfacce, generics e multithread sono pratiche caldamente consigliate.

Tutto questo utilizzando Visual Studio 2005 Team System, non strettamente necessario per l’applicazione specifica che vedremo, ma molto utile nello sviluppo di qualsiasi applicazione .NET

Team System non supporta progetti mobile, né dal punto di vista dei designer, né dal punto di vista degli strumenti di Unit Testing, Performance Testing, Code Coverage, ecc., ma con “semplici” workaround si riesce a sfruttare la potenza del prodotto anche su progetti mobile.

Particolare attenzione sarà dedicata ai problemi che derivano da codice scritto in modo frettoloso... sono enormi in un ambiente “ristretto”. Vedremo semplici tips & tricks per evitare memory leak, cali di performance al crescere dei dati e JIT compilation troppo frequenti.

Vuoi dare un senso alla tua partecipazione?
Sappi che ci sono tanti modi per scrivere codice e noi alla FWC ti faremo "vedere e toccare" solo codice scritto bene che utilizza nel modo corretto la tecnologia!

Ti aspettiamo

Roberto Brunetti - Devleap.it
Daniele Marrama - FWC.it