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