Condividere codice tra Win e Mobile

Avete sviluppato una libreria di business logic, e la volete utilizzare sia in un applicativo desktop che in un applicativo mobile: come fare?

E' un problema che prima o poi dovremo affrontare tutti, e penso sia una delle domande maggiormente post sui forum del CompactFramework: gironzolando sui vari blog di sviluppatori mobile e sui forum dedicati si trovano due diversi approcci:

  • condividere il binario
  • condividere il sorgente

Il primo caso presuppone che si sia sviluppata una device class library senza funzionalità specifiche per mobile (no accesso a Irda, SMS, camera, SQL Mobile, ecc...): in questo caso è possibile aggiungere il progetto come reference ad una normale WinForm application.
Visual Studio darà un warning, ma poi tutto funzionerà (o almento dovrebbe ) poichè quasi tutti gli assembly del Compact Framework hanno il System.Reflection.AssemblyNameFlags impostato a Retargetable, cioè possono essere "rimappate" su un'altro assembly. Per una spiegazione migliore di questo argomento vi rimando al post "Retargetable (=256)" sul blog di Daniel Moth, ex MVP Windows Mobile.

Nel secondo caso invece si adotta un'approccio differente: si crea normalmente la libreria per WinForm. Poi si crea una class library per mobile, ma, invece che aggiungere item nuovi, si aggiungono gli item presenti nella libreria sviluppata per WinForm, linkandoli invece che inserendoli: così facendo il file contenente il codice è uno solo, ma viene usato per compilare due librerie differenti.
Questo approccio permette anche di avere funzionalità aggiuntive nella libreria per desktop: è sufficiente racchiudere il codice che non andrebbe su CF all'interno di clausole di compilazione condizionale #if.

#if DESKTOP
//Siamo su Desktop
Bitmap bmp = new Bitmap(ConfigManager.RESOURCE_LOCALPATH + "\\" + fileName);
#else
//Siamo su Mobile
Bitmap bmp = new Bitmap(ConfigManager.Current.DirectoryPath + "\\"
    + ConfigManager.RESOURCE_LOCALPATH + "\\" + fileName);
#endif

Sempre Moth spiega in un suo post "Share Code (#if FULL_FRAME)", questo approccio, che lui considera migliore della condivisione del binario.
Della stessa opinione è anche Ed Kaim, uno dei moderatori del ng microsoft.public.dotnet.framework.compactframework, il quale dice che per lui è prassi comune adottare questo approccio.

Anche il nostro buon Roberto Brunetti, in un thread sul ThinkMobile.it mi ha suggerito lo stesso approccio...

powered by IMHO 1.3

Trasferimento completato

Come annunciato ieri, questa notte si è compiuto il trasferimento definitivo del mio dominio principale piyosailing.com sul webhost4life, posta compresa:

guardate il messaggio completo per vederne la prova (il traceroute verso mail.piyosailing.com).

MSDN Wiki

Anche Microsoft entra nel mondo dei Wiki:

Announcing MSDN Wiki!

Da ieri è disponibile online il wiki MSDN:

The MSDN Wiki site experiments with ways we can integrate community contributions into the Visual Studio 2005 and .NET Framework 2.0 documentation.  This is phase one.  On the current site you can add content and edit other people’s contributions in a wiki-like fashion around the official Microsoft-authored docs.  In the future we want to take this further by allowing people to edit the Microsoft-authored docs directly.  Let us know what you want to see!

Molto, molto molto interessante... http://msdnwiki.microsoft.com/

powered by IMHO 1.3

Oggi è un giorno importante

No, non è importante perchè iniziano i Campionati del Mondo di Calcio (anche perchè odio il calcio, e in questo mese preferirei migrare in Nuova Zelanda o una nazione dove il calcio non interessa a nessuno piuttosto che essere sottoposto all'isteria di massa che invaderà l'Italia fino al metà Luglio).

E' importante perchè il 2006-06-09 9:30 PM ET la gestione del mio dominio, posta compresa, passerà definitivamente su WebHost4Life e quindi non avrò più niente a che fare con quel c@#**ne del mio vecchio provider.

powered by IMHO 1.3

«giugno»
domlunmarmergiovensab
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678