Buongiorno,
di seguito architettura e librerie:
- auth: https://www.nuget.org/packages/JWT fatto bene ed essenziale, la tabella utenti ve la create direttamente su SQL Server o MySQL come vi pare.
- validation: https://www.nuget.org/packages/FluentValidation/ libreria per la validazione da studiare, la piu usata mi risulta
- tracing: https://www.nuget.org/packages/NLog/ Nlog e eventuali plugins per tracciare l'attività dei vari progetti
- database: SQL Server 2016 per supporto json e paginazione offset/fetch (dal 2012)
- orm database: https://www.nuget.org/packages/Dapper/. Attenzione ovviamente i progetti che lo implementano devono essere compliant con async/await per sfruttare i relativi metodi.
- ftp: https://www.nuget.org/packages/FluentFTP/ mi trovo molto bene con questa libreria in alternativa a WinSCP.
- serializzatore json: https://www.nuget.org/packages/Newtonsoft.Json/ ovviamente la libreria per json. Attenzione ad utilizzarla correttamente nella webapi ad esempio in WebApiConfig
- webapi: essendo il mio progetto un po vecchio, se dovessi iniziare oggi lo svilupperei core, ma finora non ho trovato grossi problemi ad utilizzare ancora aspnet alternativo precedente. Tenete peraltro conto che non tutti gli sviluppatori magari hanno fatto il porting delle proprie librerie per essere compliant con Core Framework Standard
- webapp: io ho sfruttato all'epoca l'architettura MVC per un semplice motivo: BundleConfig, iniezione di configurazione in base all'ambiente (DEV, COLL, PROD) con alcune partial views e una index.cshtml. Fondamentalmente è una SPA con AngularJS, Bootstrap 3.3.7, Fontawesone ecc..e qualche libreria js come il fondamentale MomentJS with locales. Sviluppata in questa maniera, sebbene vincolata al template MS è molto simile a come poter sviluppare una Hybrid app per Android/IOS. In essa dunque le viste son in realtà template html richiamate tramite il sistema di routing angularJS e callback http vs webapi. Non tutto è comunicazione con la webapi, ci sono poche viste che sono RAzor MVC per la gestione ad esempio della reportistica.
- reportistica: DevExpress Reporting. Ovviamente questa libreria è a pagamento ma una volta acquistata si ottiene un anno di supporto e aggiornamenti. Alla scadenza non si hanno piu aggiornamenti se non si rinnova l'abbonamento, ma si può continuare ad utilizzarla senza vincoli. Telerik e altri come alternativa ma funzionano in maniera simili. Sono carrozzoni pieni di callback nei controlli aspnet, ma sono ottime librerie per disegnare i report, programmarli con c# e soprattutto hanno esportazioni in PDF, Excel ecc...
- Hybrid app: ambiente a parte con IDE in cloud, ma il servizio che utilizzo si interfaccia anche a VS. E' completamente gratuito (alcune limitazioni) o a pagamento, ma con la versione free si fa sviluppo, compilazione in debug, pubblicazione e con la versione a pagamento anche il deploy sul market. Ovviamente Android/IOS/WP ecc...
Logica di sistema:
- il database SQL Server domina la struttura delle tabelle, niente Code First, non mi piace! Tabella gestione utenti e ruoli, analoga a Identity/Membership piu qualche altro campo. Io ho avuto a che fare con Gestionale1 Zucchetti (dbf) o ERP2 CentroSoftware (SQL Server). Nelle tabelle ci sono campi che richiamano chiavi provenienti da cui repository. Nel livello Database c'è il namespace Zucchetti o CS_Erp2 in base al sistema contabile, magazzino utilizzato dal cliente
- la webapp gestisce le anagrafiche dei clienti, fornitori, articoli, fatture in mera lettura perché è il sistema contabile che detiene la responsabilità di trattare questi dati ai fine fiscali e contabili. Io non mi sostituisco a sw contabile perché un mondo. Ovviamente questi dati li leggo tramite chiamata al provider del database, le stesse chiamate che la fa la webapi se interrogata, ad esempio dalla Hybrid app. Chiaro? Il risultato è json e sia sulla webapp, sia sulla app mobile utilizzo AngularJS, codice molto simile se non uguale in taluni casi. A quel punto se modifico qualcosa nell'html/controller/service AngularJS, faccio poi copia/incolla nei rispettivi file della app mobile e rilascio l'aggiornamento. Sono poche le situazioni in cui faccio questo, pochissime, perché l'app mobile è, come dicevo nei precedenti post, una app di servizio.
- ftp: di notte con console app che si interfacciano al provider del database e fluentFTP sincronizzo i dati sul repository web scelto dove gira la webapi. La quale quindi per quanto riguarda i dati anagrafici di base non è relatime, ovvero non legge il database del gestionale contabile perché il gestionale contabile gira in intranet in azienda e magari per problemi aziendali e/o sicurezza la macchina server su cui girano gli archivi contabili non è esposta su internet se non per aggiornare l'OS ecc...Quindi generalmente opto per la modalità di sincronizzazione giornaliera notturna: quante volte capita che le cose cambino nell'arco di 24 ore? Per la mia esperienza mai.
- hybrid app: l'app con una maschera a richiesta interroga la webapi che legge le estrazioni batch notturne degli archivi e li mette a disposizione. La app mobile quindi lavora offline (no internet): clienti, articoli, listini, insoluti. Gli agenti, ad esempio, creano ordini e li inviano quando serve e quando c'è campo. Molto spesso capita che gli agenti non possano essere collegati a internet mentre producono un ordine perché non c'è campo (cantina, wifi mancante, zona non coperta). Quindi salvano gli ordini e poi sparano tutto al sistema contabile tramite webapi. Ovviamente partono mail al cliente con conferma inoltro ordine ecc. La webapi ad esempio genera quando l'ordine viene salvato sul databse e inoltrato con flusso elettronico al sistema contabile, una mail con allego un PDF (DevExpress Reporting) dell'ordine.
Cosa analoga con la chiusura degli insoluti: essendo mandatari gli agenti prendono soldi e chiudono le partite. Parte la chiusura di queste partite che tramite webapi vengono segnale al sistema contabile e all'amministrazione. Parte una mail al cliente con la quale si dichiara di aver preso soldi per quelle partite.
- magazzino: la webapp, tramite plugin cordova per barcode mette a disposizione dell'addetto la funzione di lettura dei codici a barre. Nel report dell'ordine stampato ci sono i codici a barre degli articoli per riscontro con quelli letti direttamente sulle confezioni in magazzino o se queste mancano leggendoli proprio dal report d'ordine. Il magazziniere raggruppo gli articoli e chiude la gestione della preparazione della spedizione inoltrando le letture. Una routine chiamata dalla webapi verifica quantita e discrepanze e se tutto ok segnala al magazziniere e alla contabilità che l'ordine è in fase di spedizione. E poi tante altre belle cose concordate con il cliente di turno.
Spero sia tutto chiaro, ovviamente non ho parlato di analisi del dato ai fini statistici, rendicontativi, di business planning ecc...quelle sono cose che per altro sono anche abbastanza legate al cliente. Sebbene la statistica come la matematica non è proprio una opinione, a parte alcuni grafici standard, cliente che trovi, soluzione che adotti...
Modificato da flaviovb il 10 settembre 2018 09.07 -