Sviluppo mobile cross-OS con .NET

Ultimamente mi sto cimentando nella programmazione per sistemi operativi mobile. In particolare, insieme ad un mio carissimo amico, stiamo tentando di concretizzare qualche progettino destinato al mercato degli smartphone.

Nella progettazione di queste soluzioni (beh si, non guardatemi male, io di solito inizio dalla progettazione e non scrivendo direttamente codice) abbiamo identificato la seguente architettura:

  • Web Service esposti sul web contenti la logica di business
  • Database server sul web server
  • Applicazione mobile che richiama i servizi e si occupa essenzialmente della visualizzazione dei risultati e di gestire la UI

A questa organizzazione del lavoro, siamo giunti dopo aver analizzato i seguenti aspetti:

  1. Inserire la logica lato server ci permette di rendere il servizio disponibile su più tipologie diverse di client, cioè essenzialmente su più piattaforme
  2. Inserire la logica lato server ci permette di semplificare al massimo la logica lato client
  3. Inserire la logica lato server ci permette di programmare la logica in C# usando .NET, il che, fidatevi, è un enorme vantaggio

Il terzo punto in particolare va sottolineato perché se, come abbiamo intenzione di fare noi, si vogliono realizzare applicazioni su iPhone e iPad, è necessario imparare l'objective-c e buona parte della libreria Cocoa. Considerando che gran parte delle applicazioni per smartphone che riportano informazioni, lo fanno parserizzando selvaggiamente pagine HTML, volete mettere quando è semplice farlo utilizzando le API di .NET rispetto al SDK di iOS?

In realtà stiamo valutando anche la possibilità di scrivere le applicazioni lato client in C# utilizzando Monotouch. Questo ci permetterebbe di rendere l'applicazione facilmente "portabile" anche su Windows Phone 7 e, contestualmente, semplifica non poco effettuare operazioni come le chiamate ai web service che su iOS vanno praticamente costruite a manina. Pensate che nella roadmap di Mono è previsto perfino Monodroid per lo sviluppo in C# per Android :-)