Ciao,
Volevo realizzare un'applicazione per Windows
Ok, allora le tecnologie che puoi utilizzare per l'applicazione client sono:
- Windows Forms, la tecnologia storica per realizzare applicazioni Windows;
- WPF, un approccio più nuovo che è dotato di un potente meccanismo di binding e di layout dei controlli che ridurrà di molto il codice che dovrai scrivere.
Tra le due, scegli quella che reputi più oppotuno usare basandoti sulle tue conoscenze e sul tempo che puoi dedicare alla tua formazione.
Conoscendole entrambe, io personalmente preferisco usare WPF e non tornerei mai indietro a Windows Forms.
Se scegli per WPF, qui trovi la documentazione ma considera anche l'ipotesi di acquistare un libro.
https://msdn.microsoft.com/it-it/library/ms754130(v=vs.110).aspxAnche lato backend bisogna fare una scelta:
- Tenere giusto un database MySql, consapevole del fatto che tutta la logica di business la dovrai necessariamente mettere nel client. Questo significa che se un utente dell'applicazione viene a conoscenza della stringa di connessione a MySql, potrà aprire il database e vedere tutto quel che c'è dentro (e modificarlo senza restrizioni), bypassando così le regole e le autorizzazioni che puoi aver messo nell'applicazione client. Se sei molto disciplinato, puoi riuscire ad evitarlo creando un utente diverso nel database per ogni utente dell'applicazione client. Quindi ogni utente avrà una propria connection string che gli consentirà di avere accesso solo ad alcune viste e stored procedures. Questo approccio lo puoi valutare se non ti secca lavorare molto col codice SQL.
- Inserire un webservice tra l'applicazione client e il database MySql, in cui inserirai della logica di autorizzazione non bypassabile dal client. Il database si troverebbe protetto dal webserver e quindi non sarebbe direttamente raggiungibile dall'applicazione client, che dialoga unicamente col webservice. Puoi usare un servizio web WCF o ASP.NET WebAPI a tale scopo.
La prima soluzione è la più facile. Sceglila se non ti importa che un utente possa (potenzialmente) modificare il contenuto del database a suo piacimento. Eventualmente puoi proteggere il db da MySql, agendo sugli utenti e sulle loro autorizzazioni,
La seconda soluzione ti richiederà di imparare a scrivere applicazioni ASP.NET. Se hai tempo a disposizione per fare formazione, è un percorso che io personalmente affronterei per la mia crescita professionale.
In entrambi i casi, quando cade la connettività dovrai memorizzare le operazioni compiute dall'utente su un database locale, ad esempio Sqlite che non richiede particolari installazioni sul client.
Quando torna la connessione, leggi dal db Sqlite e riprova ad inviarle al server (che si tratti di un Webservice o di MySql). E' una tecnica che si chiama "store and forward".
Dovrai prevedere un meccanismo di concorrenza ottimistica per evitare che i dati vadano inavvertitamente sovrascritti. Ad esempio:
- 1 febbraio: l'utente A fa una modifica all'anagrafica del cliente Pippo, ma non ha connettività e quindi le modifiche vengono scritte nel db locale Sqlite;
- 2 febbraio: l'utente B fa anche lui una modifica all'anagrafica del cliente Pippo e, siccome ha connettività, le modifiche vengono scritte direttamente nel db MySql;
- 28 febbraio: è passato un mese e nel frattempo l'utente B ha fatto varie altre modifiche. L'utente A si ricollega al client e, siccome c'è connettività, la sua modifica viene trasferita al server sovrascrivendo tutto il lavoro che l'utente B aveva fatto all'anagrafica del cliente Pippo. Questo disastro va evitato facendo in modo che il server rifiuti le modifiche se erano state apportate su una versione obsoleta dei dati.
Dovrai essere tu in grado di scegliere le tecnologie appropriate per questo particolare progetto. Eventualmente, almeno per la fase decisionale, affidati ad un consulente che ti sappia consigliare le tecnologie giuste valutando bene il budget di tempo e denaro che hai a disposizione.
ciao,
Moreno
Modificato da BrightSoul il 12 febbraio 2017 11.30 -