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

posted @ sabato 10 giugno 2006 21:00

Print
Comments have been closed on this topic.
«maggio»
domlunmarmergiovensab
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456