Nel contesto dello sviluppo con ASP.NET Core 9, la combinazione di Entity Framework Core (EF Core) e Dapper rappresenta un approccio versatile ed efficiente per la gestione della persistenza dei dati. EF Core, come ORM (Object-Relational Mapper), offre un livello di astrazione che semplifica notevolmente il mapping tra oggetti C# e tabelle del database, rendendo il codice più leggibile e meno soggetto a errori. Tuttavia, in scenari dove la performance è cruciale o si desiderano eseguire query SQL molto specifiche, Dapper, un micro ORM leggero e performante, si rivela una scelta ottimale.

Un esempio pratico illustra come si possa integrare Dapper in un progetto ASP.NET Core 9: tramite l’iniezione delle dipendenze, l’oggetto SqlConnection viene configurato con lo stesso connection string usato dal DbContext di EF Core, garantendo così coerenza e riuso all’interno della stessa richiesta HTTP. La connessione è registrata con ciclo di vita Scoped, assicurando che venga mantenuta e condivisa durante l’elaborazione della singola richiesta.

L’utilizzo di metodi asincroni come QueryFirstOrDefaultAsync permette di eseguire query con parametri nominati, come nel caso della ricerca di un cliente tramite ID. La sintassi SQL contenuta nella stringa consente a Dapper di sostituire in modo sicuro e performante i placeholder con i valori corrispondenti, definiti in oggetti anonimi C#. Tale meccanismo non solo assicura protezione contro le iniezioni SQL ma consente anche una scrittura pulita e modulare delle query.

È importante sottolineare che recuperare tutte le righe di una tabella senza filtri, come mostrato nell’esempio di QueryAsync, può portare a problemi di performance e consumo eccessivo di risorse, specialmente con database di grandi dimensioni. Per questo motivo, l’adozione di tecniche di paginazione è fortemente raccomandata per mantenere alta l’efficienza e l’usabilità dell’applicazione. La paginazione permette di suddividere i dati in blocchi più piccoli e gestibili, facilitando così sia la navigazione da parte dell’utente che la gestione delle risorse di sistema.

Dapper offre inoltre estensioni come il Dapper SQL Builder, che agevola la costruzione dinamica di query SQL complesse, adattandole a condizioni variabili senza compromettere la leggibilità e la manutenzione del codice. Questa flessibilità rende Dapper particolarmente indicato per scenari in cui la logica di accesso ai dati deve essere precisa e ottimizzata.

L’integrazione di EF Core e Dapper consente di sfruttare il meglio di entrambi i mondi: EF Core per la gestione semplice e rapida degli oggetti e la mappatura automatica, e Dapper per operazioni altamente performanti e personalizzate. Questa sinergia offre una solida base per costruire applicazioni ASP.NET Core che si adattano a contesti sia semplici sia complessi, mantenendo sempre elevati standard di qualità e manutenibilità.

Oltre all’implementazione tecnica, è essenziale comprendere il ruolo che l’iniezione delle dipendenze (DI) svolge nel ciclo di vita degli oggetti di connessione, permettendo un’efficace gestione delle risorse e prevenendo perdite di connessione o sovraccarichi. Inoltre, la conoscenza delle differenze tra ORM e micro ORM aiuta a scegliere la strategia migliore in base al caso d’uso, bilanciando semplicità di sviluppo e requisiti di performance.

Infine, una corretta progettazione delle query SQL, la gestione attenta dei parametri e l’adozione di best practice come la paginazione e l’uso di strumenti adeguati per il monitoraggio e il testing (ad esempio Postman per le API o Azure Data Studio per l’esecuzione di script SQL) sono aspetti imprescindibili per garantire la robustezza e la scalabilità delle applicazioni.

Come pubblicare un'applicazione ASP.NET Core 9 su Azure

Azure, come provider di cloud computing, offre un ambiente dinamico che permette agli sviluppatori di beneficiare di funzionalità avanzate come elasticità, disponibilità e sicurezza, semplificando il processo di distribuzione, gestione e evoluzione delle applicazioni. La pubblicazione di un'applicazione ASP.NET Core 9 su Azure consente di sfruttare appieno le capacità offerte da questa piattaforma, focalizzandosi sugli obiettivi aziendali e sul contesto applicativo, senza doversi preoccupare della gestione dell'infrastruttura. Azure, con la sua vasta gamma di risorse e servizi, permette di gestire carichi di lavoro variabili, garantendo l'accessibilità e la protezione contro le minacce alla sicurezza.

Nel contesto di questa guida, esploreremo il processo di pubblicazione dell'applicazione "UrlShortener", sviluppata precedentemente, utilizzando Azure App Service, una delle offerte PaaS (Platform-as-a-Service) di Azure. Questo approccio ci consente di concentrarci esclusivamente sullo sviluppo dell'applicazione, mentre Azure gestisce l'infrastruttura sottostante.

Creazione e configurazione dei servizi applicativi su Azure

Azure offre diverse risorse per la pubblicazione delle applicazioni, ognuna con livelli di servizio variabili e approcci di pubblicazione differenziati. Per il nostro caso, utilizzeremo la risorsa chiamata App Service, che fornisce una piattaforma completamente gestita per il deployment di applicazioni web, backend mobili e API RESTful. App Service si occupa della gestione del server, offrendo anche un URL per accedere all'applicazione pubblicata.

La pubblicazione di un'applicazione in Azure inizia con la creazione di un App Service, che può essere effettuata facilmente tramite il portale di Azure. Dopo aver effettuato l'accesso al portale di Azure, si seleziona la creazione di una nuova risorsa web. In questa fase, è importante scegliere i parametri corretti per configurare il servizio in base alle esigenze dell'applicazione. La creazione di un Gruppo di risorse è il primo passo, seguito dalla configurazione di parametri come il nome dell'applicazione, il piano di servizio e la scelta del sistema operativo, che può essere Linux o Windows.

Nel nostro caso, utilizzeremo la versione .NET 9 (LTS) per la runtime stack, poiché l'applicazione è sviluppata con questa versione di ASP.NET Core. È importante considerare anche la scelta della regione, che influenzerà la latenza e la disponibilità dell'applicazione. Dopo aver completato la configurazione iniziale, si può passare alla creazione del database necessario per l'applicazione, che in questo caso sarà un Azure SQL Server.

Configurazione del database in Azure

Una parte fondamentale nella pubblicazione di un'applicazione è la configurazione del database. Nel caso dell'applicazione UrlShortener, è necessario configurare un database per memorizzare gli URL accorciati. Azure SQL Server è la risorsa ideale per questo scopo, poiché offre una soluzione sicura e scalabile per l'archiviazione dei dati.

Durante la creazione del database, è possibile scegliere di configurare una nuova istanza di SQL Server. Azure fornisce una password di amministratore che deve essere salvata in modo sicuro, poiché sarà necessaria per connettersi al database in fase di sviluppo e configurazione dell'applicazione. In questo processo, è fondamentale configurare correttamente l'accesso al database, poiché, per motivi di sicurezza, il database non è accessibile pubblicamente.

Pubblicazione dell'applicazione

Una volta configurato l'ambiente di Azure, è possibile procedere con la pubblicazione dell'applicazione. Azure offre vari metodi per pubblicare il codice, ma in questo caso utilizzeremo l'opzione Publish Code, che permette di caricare il pacchetto dell'applicazione direttamente sulla piattaforma. Dopo aver selezionato il piano di servizio (in questo caso, il piano Basic B1), si deve completare la configurazione del database, assicurandosi che tutte le credenziali siano correttamente inserite. Successivamente, sarà possibile accedere al sito web pubblicato tramite l'URL predefinito fornito da Azure.

Una volta che l'applicazione è stata distribuita, è possibile testarla tramite l'URL assegnato da Azure. La pagina predefinita mostrerà un messaggio di benvenuto, indicando che il server è correttamente attivo, ma sarà necessario completare la configurazione del database e dell'applicazione prima che l'applicazione possa essere pienamente operativa.

Considerazioni aggiuntive

L'approccio PaaS di Azure semplifica notevolmente la gestione dell'infrastruttura, consentendo agli sviluppatori di concentrarsi sulla logica applicativa e sugli obiettivi aziendali, senza doversi preoccupare della gestione dei server o della scalabilità. Tuttavia, è fondamentale comprendere che, sebbene Azure gestisca automaticamente molte delle operazioni di manutenzione e scalabilità, la configurazione iniziale dell'applicazione e la gestione delle risorse, come il database, richiedono attenzione ai dettagli.

Inoltre, quando si lavora con Azure, è importante monitorare le risorse e ottimizzare la configurazione in base alle esigenze reali dell'applicazione. Sebbene non si tratti di un requisito immediato durante la fase di sviluppo, è altamente consigliato integrare strumenti di monitoraggio e sicurezza, come Application Insights, che possono fornire un valore significativo durante la fase di produzione. La sicurezza dell'applicazione, come la protezione del database e la gestione delle credenziali, deve essere sempre una priorità, soprattutto quando si tratta di dati sensibili.