SlideShare a Scribd company logo
xedotnet.org
Andrea Dottor
@dottor
Blazor ha vinto?
Storie di casi reali
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
Blazor is a framework for building interactive client-side web UI with .NET:
• Create rich interactive UIs using C# instead of JavaScript.
• Share server-side and client-side app logic written in .NET.
• Render the UI as HTML and CSS for wide browser support, including mobile browsers.
• Integrate with modern hosting platforms, such as Docker.
Using .NET for client-side web development offers the following advantages:
• Write code in C# instead of JavaScript.
• Leverage the existing .NET ecosystem of .NET libraries.
• Share app logic across server and client.
• Benefit from .NET's performance, reliability, and security.
• Stay productive with Visual Studio on Windows, Linux, and macOS.
• Build on a common set of languages, frameworks, and tools that are stable, feature-
rich, and easy to use.
Cos'è Blazor
https://docs.microsoft.com/en-us/aspnet/core/blazor/
Blazor Server
Blazor WebAssembly
Performance improvements
• "For .NET 5, we made significant improvements to Blazor WebAssembly runtime
performance with a specific focus on complex UI rendering and JSON serialization.
In our performance tests, Blazor WebAssembly in .NET 5 is two to three times
faster for most scenarios."
https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-release-candidate-1/#blazor-
webassembly-performance-improvements
Debugging improvements
• "Debugging Blazor WebAssembly apps is improved in ASP.NET Core 5.0.
Additionally, debugging is now supported on Visual Studio for Mac"
https://docs.microsoft.com/en-us/aspnet/core/blazor/debug
Trimming/linking improvements
• "Blazor WebAssembly performs Intermediate Language (IL) trimming/linking
during a build to trim unnecessary IL from the app's output assemblies. With the
release of ASP.NET Core 5.0, Blazor WebAssembly performs improved trimming
with additional configuration options"
https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/configure-trimmer
Dove siamo arrivati (con .NET 5)
Lazy load assemblies
• https://docs.microsoft.com/en-us/aspnet/core/blazor/webassembly-lazy-load-assemblies
Blazor JavaScript isolation
• https://docs.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-5.0#blazor-
javascript-isolation-and-object-references
Prerendering for Blazor WebAssembly
• https://docs.microsoft.com/en-us/aspnet/core/blazor/components/prerendering-and-integration
Protected Browser Storage for Blazor Server
• https://docs.microsoft.com/it-it/aspnet/core/blazor/state-management#aspnet-core-protected-browser-storage
New components
• InputFile, InputRadio, InputRadioGroup
Dove siamo arrivati (con .NET 5)
AOT Compilation
Drag & Drop
Hot Reload (via dotnet watch)
…
https://github.com/dotnet/aspnetcore/issues/27883
https://github.com/dotnet/aspnetcore/projects/15#card-49713369
[WIP] ASP.NET Core 6 Roadmap
Curva di apprendimento (relativamente bassa)
• per essere produttivi da subito --> ASP.NET Core
• con un minimo di formazione --> per chi usa ASP.NET MVC
• con la "sola" formazione su HTML e Razor --> per chi conosce C#
Curva di apprendimento
https://jaxenter.com/blazor-2020-167525.html
"One thing that shocked me about Blazor is how genuinely
simple it feels to use. Blazor combines the ease of Razor with
other .NET concepts. It has borrowed the best patterns from
popular JavaScript frameworks like Angular and React while
leveraging Razor templates and provided parity with other .NET
conventions. This combination of features allows for the reuse
of skills in a way that was unavailable before. The same could
be said for Node developers who use one language and familiar
concepts in full stack JavaScript apps."
Blazor in 3 casi reali (+1)
Azienda: Hunext
Migrazione dell'applicativo Ufficio Web verso ASP.NET Core
• Applicazione sviluppata con:
• Visual Basic .NET
• C#
• Web Form
• ASP.NET MVC (per le API REST)
Nuovi applicativi ASP.NET Core
Scenario _1
Azienda: Hunext
Porting di applicativi desktop nel web
• Applicazioni Visual Basic 6
• Applicazioni Access
Necessità di offrire un'usabilità che si avvicini a quella che
gli utenti conoscono nel mondo desktop
Scenario _2
Azienda: Quantumdatis
Sviluppo di un'applicazione web per la gestione e
generazione di report di Reporting Service
• Windows Authentication
• Login
• Accesso al db
• Accesso ai servizi
• Uso delle API di Reporting Services
* Il team ha conoscenze di sviluppo desktop e ma non ha mai usato ASP.NET
Scenario _3
Marco Bortolin
HUNEXT:
Da WebForm a .NET Core
Scenario _1
Applicazione WebForm da migrare/portare verso .NET Core
Applicazione WebForm da migrare/portare verso .NET Core
1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che
richiedono maggiore interattività/dinamismo
• Utilizzo dei Razor Component
2. Blazor server-side permette il riuso di codice esistente
3. Blazor ha alcune similitudini con WebForm
• Mantenimento dello stato dei controlli
• Modello Event-Driven
Applicazione WebForm da migrare/portare verso .NET Core
Permettono l'adozione di Blazor in aree localizzate dell'applicazione
• File con estensione .razor
• Fanno da entry-point ad applicazioni Blazor
• Accettano parametri in ingresso
Il prodotto non si vincola ad una particolare tecnologia client
Razor Component
@(await Html.RenderComponentAsync<Pager>(
new {
pageNumber = Model.PageNumber,
totalRecords = 150,
pageSize = 20,
linkUrl = Url.PageLink("Index")
}))
Utilizzo dei Razor Component
Se l'accesso ai dati (lettura e salvataggio) viene fatto tramite API
rest, un'eventuale migrazione verso Blazor WebAssembly è più
facile
Un occhio al futuro
1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che
richiedono maggiore interattività/dinamismo
• Utilizzo dei Razor Component
2. Blazor server-side permette il riuso di codice esistente
3. Blazor ha alcune similitudini con WebForm
• Mantenimento dello stato dei controlli
• Modello Event-Driven
Applicazione WebForm da migrare/portare verso .NET Core
E' possibile chiamare gli stessi Service utilizzanti in WebForm
E' possibile utilizzare gli stessi Command e Query (CQRS)
Riuso di codice esistente
1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che
richiedono maggiore interattività/dinamismo
• Utilizzo dei Razor Component
2. Blazor server-side permette il riuso di codice esistente
3. Blazor ha alcune similitudini con WebForm
• Mantenimento dello stato dei controlli
• Modello Event-Driven
Applicazione WebForm da migrare/portare verso .NET Core
Blazor for ASP.NET Web Forms Developers
• https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-
developers/
Blazor for Web Form and C# Developers
• https://www.youtube.com/watch?v=gmopA3LEEeE
.NET Conf 2020 - From Web Forms to Blazor - Introducing the Blazor Web
Forms Components
• https://channel9.msdn.com/Events/dotnetConf/2020/From-Web-Forms-to-
Blazor-Introducing-the-Blazor-Web-Forms-Components
Articoli e video
"A collection of Blazor components
that emulate the web forms
components of the same name"
https://github.com/FritzAndFriends/BlazorWebFormsComponents
BlazorWebFormsComponents
HUNEXT:
Porting di applicativi
desktop (vb6, access)
Scenario _2
Premesse
• Gli applicativi utilizzando un database SQL Server
• Parte dell'accesso ai dati esistenti sfrutta .NET e CQRS
Utilizzo di Blazor Server (ad oggi)
• Riuso di codice esistente
• Riuso di conoscenze interne all'azienda
• C#
• CQRS
• Permette di avere una UI che si avvicini (ad usabilità) a quella desktop
Porting di applicativi desktop verso Blazor
Per velocizzare il porting degli applicativi Access, è stato creato un template
replicabile, così da poter applicare un generatore di codice.
• Il generatore, legge la struttura delle maschere di Access e genera codice C# e Blazor
Porting di applicativi desktop - da dove siamo partiti
• .NET Conf 2020 - Migrating a Windows Forms App to Blazor: The Amazing
and True Story of GIFBot
• James Montemagno / Georgia Nelson
• https://www.youtube.com/watch?v=NRDdu67VJH0
Migrating a Windows Forms App to Blazor
Electron e PWA
Quantumdatis:
Sviluppo Data Driven Manager
Scenario _3
Passaggio al web di un team desktop
Passaggio al web di un team desktop
Utilizzo di Blazor Server
Riuso di conoscenze che il team già utilizza
• C#
• Codice di accesso ai dati
• Chiamare a servizi REST
Formazione per le caratteristiche di ASP.NET utili all'obiettivo
• Dependency Injection
• Blazor
• Razor
Affiancamento durante la realizzazione della prima versione
Passaggio al web di un team desktop
Ridurre lo stack
tecnologico
Scenario _4
Non tutte le applicazioni necessitano della miglior tecnologia per ogni sua parte
• La "miglior tecnologia" va valutata caso per caso
Utilizzando C# sia per back-end (ASP.NET Core) che front-end (Blazor)
• Meno tecnologie da dover conoscere e mantenere
• Riduzione delle competenze necessarie
• Semplificazione nel deployment
Ridurre lo stack tecnologico
Conclusioni
Blazor ha vinto? Storie di casi reali
Publish a Blazor WebAssembly app and .NET API with
Azure Static Web Apps
• https://docs.microsoft.com/en-us/learn/modules/publish-app-service-static-web-
app-api-dotnet/
Azure Static Web Apps with .NET and Blazor
• https://devblogs.microsoft.com/aspnet/azure-static-web-apps-with-blazor/
Static Web Apps
Blazor ha vinto? Storie di casi reali
Le maggiori aziende (DevExpress, Telerik, Syncfusion, …) hanno la loro libreria per Blazor
• https://www.devexpress.com/blazor/
• https://www.telerik.com/blazor-ui
• https://www.syncfusion.com/blazor-components
Sono nate molte librerie open-source
• Radzen (https://blazor.radzen.com/ )
• Blazorise (https://blazorise.com/ )
• MatBlazor (https://www.matblazor.com/ )
• Material.Blazor (https://material-blazor.com/ )
• Exentials.MdcBlazor (https://github.com/exentials/MdcBlazor )
• …
!! Attenzione alla maturità della libreria che scegliete di utilizzare
!! Attenzione ad usare framework JavaScript che modificano il DOM
Librerie di UI
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
www.dottor.net
andrea@dottor.net
@dottor
Andrea Dottor
Microsoft MVP Developer Technologies
Contatti
Images from https://pixabay.com
Podcast ".NET in Pillole"
• DEV.is.it - .NET in pillole
• Spotify:
https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ
• Spreaker:
https://www.spreaker.com/show/net-in-pillole
• Apple podcast:
https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398
• Google podcast:
https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3cvMzY4NTM0NC9lcGlzb2Rlcy9mZWVk
• YouTube:
https://www.youtube.com/user/andreadottor/

More Related Content

PDF
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Andrea Dottor
 
PDF
ASP.NET Core - Razor Pages
Andrea Dottor
 
PDF
Blazor per uno sviluppatore Web Form
Andrea Dottor
 
PDF
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
PDF
Alla scoperta di gRPC
Andrea Dottor
 
PPTX
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
PDF
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
PPTX
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Andrea Dottor
 
ASP.NET Core - Razor Pages
Andrea Dottor
 
Blazor per uno sviluppatore Web Form
Andrea Dottor
 
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
Alla scoperta di gRPC
Andrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 

What's hot (20)

PPTX
Sviluppare Azure Web Apps
Andrea Dottor
 
PPT
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
PPTX
Windows azure - abbattere tempi e costi di sviluppo
Andrea Dottor
 
PPTX
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Andrea Dottor
 
PPTX
Introduzione ad ASP.NET Core
Andrea Dottor
 
PPTX
Customize ASP.NET Core scaffolding
Andrea Dottor
 
PPT
Esempi pratici
DotNetMarche
 
PPTX
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
PPTX
Javascript task automation
Antonio Liccardi
 
PDF
ASP .NET Core hands-on
ugidotnet
 
PDF
Dependency injection questa sconosciuta
Andrea Dottor
 
PPTX
.Net 4.0 Preview @ UGIdotNet
Mauro Servienti
 
PPTX
Del furia signalr-to-the-max
DotNetCampus
 
PPTX
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Codemotion
 
PDF
Meetup ASP.NET Core 2 e Docker
dotnetcode
 
PPTX
Javascript task automation
DotNetCampus
 
PPTX
Wcf data services
Salvatore Sorrentino
 
PDF
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
dotnetcode
 
PPT
Generazione Dinamica di Codice in .NET
Stefano Ottaviani
 
PPTX
DotNetCampus - Continuous Integration con Sql Server
Alessandro Alpi
 
Sviluppare Azure Web Apps
Andrea Dottor
 
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
Windows azure - abbattere tempi e costi di sviluppo
Andrea Dottor
 
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Andrea Dottor
 
Introduzione ad ASP.NET Core
Andrea Dottor
 
Customize ASP.NET Core scaffolding
Andrea Dottor
 
Esempi pratici
DotNetMarche
 
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Javascript task automation
Antonio Liccardi
 
ASP .NET Core hands-on
ugidotnet
 
Dependency injection questa sconosciuta
Andrea Dottor
 
.Net 4.0 Preview @ UGIdotNet
Mauro Servienti
 
Del furia signalr-to-the-max
DotNetCampus
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Codemotion
 
Meetup ASP.NET Core 2 e Docker
dotnetcode
 
Javascript task automation
DotNetCampus
 
Wcf data services
Salvatore Sorrentino
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
dotnetcode
 
Generazione Dinamica di Codice in .NET
Stefano Ottaviani
 
DotNetCampus - Continuous Integration con Sql Server
Alessandro Alpi
 
Ad

Similar to Blazor ha vinto? Storie di casi reali (20)

PPTX
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
PDF
Blazor: are we ready for the launch?
Andrea Agnoletto
 
PPTX
Cert03 70-486 developing asp.net mvc 4 web applications
DotNetCampus
 
PPTX
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 
PPTX
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
Codemotion
 
PPTX
Dal requisito all'implementazione @ CD2010
Mauro Servienti
 
PPTX
Alessandro Forte - ASP.Net 4.0
Alessandro Forte
 
PPTX
Christmas greetings cards with blazor
Nicolò Carandini
 
PPTX
Cert04 70-484 - essentials of developing windows store apps
DotNetCampus
 
PPS
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
 
PDF
Designing with microservices - Daniele Mondello
Daniele Mondello
 
PDF
Spa with Blazor
Nicolò Carandini
 
PDF
Antica presentazione AJAX
Tommaso Torti
 
PPTX
Sys03 microsoft azure for it pro
DotNetCampus
 
PPTX
Introduzione a DotNetNuke
Massimo Bonanni
 
PPTX
Novità di Asp.Net 4.0
Gian Maria Ricci
 
PPTX
OpenDevSecOps 2019 - Open devsecops un caso di studio
Emerasoft, solutions to collaborate
 
PPTX
Le novita di visual studio 2012
Crismer La Pignola
 
PDF
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
 
PDF
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
Blazor: are we ready for the launch?
Andrea Agnoletto
 
Cert03 70-486 developing asp.net mvc 4 web applications
DotNetCampus
 
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
Codemotion
 
Dal requisito all'implementazione @ CD2010
Mauro Servienti
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte
 
Christmas greetings cards with blazor
Nicolò Carandini
 
Cert04 70-484 - essentials of developing windows store apps
DotNetCampus
 
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
 
Designing with microservices - Daniele Mondello
Daniele Mondello
 
Spa with Blazor
Nicolò Carandini
 
Antica presentazione AJAX
Tommaso Torti
 
Sys03 microsoft azure for it pro
DotNetCampus
 
Introduzione a DotNetNuke
Massimo Bonanni
 
Novità di Asp.Net 4.0
Gian Maria Ricci
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
Emerasoft, solutions to collaborate
 
Le novita di visual studio 2012
Crismer La Pignola
 
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
 
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Ad

More from Andrea Dottor (15)

PDF
Blazor ♥️ JavaScript
Andrea Dottor
 
PDF
Blazor, lo sapevi che...
Andrea Dottor
 
PDF
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Andrea Dottor
 
PDF
What's New in ASP.NET Core 3
Andrea Dottor
 
PPTX
Real case: migrate from Web Forms to ASP.NET Core gradually
Andrea Dottor
 
PPTX
ASP.NET, ottimizziamo con la cache
Andrea Dottor
 
PDF
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
PPTX
Deploy & Run on Azure App Service
Andrea Dottor
 
PPTX
ASP.NET Core
Andrea Dottor
 
PDF
L'evoluzione del web
Andrea Dottor
 
PPTX
Crea servizi REST per la tua App con ASP.NET 5
Andrea Dottor
 
PPTX
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
PPTX
ASP.NET performance optimization
Andrea Dottor
 
PPTX
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
PPTX
Migliora il tuo codice con knockout.js
Andrea Dottor
 
Blazor ♥️ JavaScript
Andrea Dottor
 
Blazor, lo sapevi che...
Andrea Dottor
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Andrea Dottor
 
What's New in ASP.NET Core 3
Andrea Dottor
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Andrea Dottor
 
ASP.NET, ottimizziamo con la cache
Andrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Deploy & Run on Azure App Service
Andrea Dottor
 
ASP.NET Core
Andrea Dottor
 
L'evoluzione del web
Andrea Dottor
 
Crea servizi REST per la tua App con ASP.NET 5
Andrea Dottor
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
ASP.NET performance optimization
Andrea Dottor
 
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
Migliora il tuo codice con knockout.js
Andrea Dottor
 

Blazor ha vinto? Storie di casi reali

  • 1. xedotnet.org Andrea Dottor @dottor Blazor ha vinto? Storie di casi reali
  • 4. Blazor is a framework for building interactive client-side web UI with .NET: • Create rich interactive UIs using C# instead of JavaScript. • Share server-side and client-side app logic written in .NET. • Render the UI as HTML and CSS for wide browser support, including mobile browsers. • Integrate with modern hosting platforms, such as Docker. Using .NET for client-side web development offers the following advantages: • Write code in C# instead of JavaScript. • Leverage the existing .NET ecosystem of .NET libraries. • Share app logic across server and client. • Benefit from .NET's performance, reliability, and security. • Stay productive with Visual Studio on Windows, Linux, and macOS. • Build on a common set of languages, frameworks, and tools that are stable, feature- rich, and easy to use. Cos'è Blazor https://docs.microsoft.com/en-us/aspnet/core/blazor/
  • 7. Performance improvements • "For .NET 5, we made significant improvements to Blazor WebAssembly runtime performance with a specific focus on complex UI rendering and JSON serialization. In our performance tests, Blazor WebAssembly in .NET 5 is two to three times faster for most scenarios." https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-release-candidate-1/#blazor- webassembly-performance-improvements Debugging improvements • "Debugging Blazor WebAssembly apps is improved in ASP.NET Core 5.0. Additionally, debugging is now supported on Visual Studio for Mac" https://docs.microsoft.com/en-us/aspnet/core/blazor/debug Trimming/linking improvements • "Blazor WebAssembly performs Intermediate Language (IL) trimming/linking during a build to trim unnecessary IL from the app's output assemblies. With the release of ASP.NET Core 5.0, Blazor WebAssembly performs improved trimming with additional configuration options" https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/configure-trimmer Dove siamo arrivati (con .NET 5)
  • 8. Lazy load assemblies • https://docs.microsoft.com/en-us/aspnet/core/blazor/webassembly-lazy-load-assemblies Blazor JavaScript isolation • https://docs.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-5.0#blazor- javascript-isolation-and-object-references Prerendering for Blazor WebAssembly • https://docs.microsoft.com/en-us/aspnet/core/blazor/components/prerendering-and-integration Protected Browser Storage for Blazor Server • https://docs.microsoft.com/it-it/aspnet/core/blazor/state-management#aspnet-core-protected-browser-storage New components • InputFile, InputRadio, InputRadioGroup Dove siamo arrivati (con .NET 5)
  • 9. AOT Compilation Drag & Drop Hot Reload (via dotnet watch) … https://github.com/dotnet/aspnetcore/issues/27883 https://github.com/dotnet/aspnetcore/projects/15#card-49713369 [WIP] ASP.NET Core 6 Roadmap
  • 10. Curva di apprendimento (relativamente bassa) • per essere produttivi da subito --> ASP.NET Core • con un minimo di formazione --> per chi usa ASP.NET MVC • con la "sola" formazione su HTML e Razor --> per chi conosce C# Curva di apprendimento https://jaxenter.com/blazor-2020-167525.html "One thing that shocked me about Blazor is how genuinely simple it feels to use. Blazor combines the ease of Razor with other .NET concepts. It has borrowed the best patterns from popular JavaScript frameworks like Angular and React while leveraging Razor templates and provided parity with other .NET conventions. This combination of features allows for the reuse of skills in a way that was unavailable before. The same could be said for Node developers who use one language and familiar concepts in full stack JavaScript apps."
  • 11. Blazor in 3 casi reali (+1)
  • 12. Azienda: Hunext Migrazione dell'applicativo Ufficio Web verso ASP.NET Core • Applicazione sviluppata con: • Visual Basic .NET • C# • Web Form • ASP.NET MVC (per le API REST) Nuovi applicativi ASP.NET Core Scenario _1
  • 13. Azienda: Hunext Porting di applicativi desktop nel web • Applicazioni Visual Basic 6 • Applicazioni Access Necessità di offrire un'usabilità che si avvicini a quella che gli utenti conoscono nel mondo desktop Scenario _2
  • 14. Azienda: Quantumdatis Sviluppo di un'applicazione web per la gestione e generazione di report di Reporting Service • Windows Authentication • Login • Accesso al db • Accesso ai servizi • Uso delle API di Reporting Services * Il team ha conoscenze di sviluppo desktop e ma non ha mai usato ASP.NET Scenario _3
  • 16. HUNEXT: Da WebForm a .NET Core Scenario _1
  • 17. Applicazione WebForm da migrare/portare verso .NET Core
  • 18. Applicazione WebForm da migrare/portare verso .NET Core
  • 19. 1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che richiedono maggiore interattività/dinamismo • Utilizzo dei Razor Component 2. Blazor server-side permette il riuso di codice esistente 3. Blazor ha alcune similitudini con WebForm • Mantenimento dello stato dei controlli • Modello Event-Driven Applicazione WebForm da migrare/portare verso .NET Core
  • 20. Permettono l'adozione di Blazor in aree localizzate dell'applicazione • File con estensione .razor • Fanno da entry-point ad applicazioni Blazor • Accettano parametri in ingresso Il prodotto non si vincola ad una particolare tecnologia client Razor Component @(await Html.RenderComponentAsync<Pager>( new { pageNumber = Model.PageNumber, totalRecords = 150, pageSize = 20, linkUrl = Url.PageLink("Index") }))
  • 21. Utilizzo dei Razor Component
  • 22. Se l'accesso ai dati (lettura e salvataggio) viene fatto tramite API rest, un'eventuale migrazione verso Blazor WebAssembly è più facile Un occhio al futuro
  • 23. 1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che richiedono maggiore interattività/dinamismo • Utilizzo dei Razor Component 2. Blazor server-side permette il riuso di codice esistente 3. Blazor ha alcune similitudini con WebForm • Mantenimento dello stato dei controlli • Modello Event-Driven Applicazione WebForm da migrare/portare verso .NET Core
  • 24. E' possibile chiamare gli stessi Service utilizzanti in WebForm E' possibile utilizzare gli stessi Command e Query (CQRS) Riuso di codice esistente
  • 25. 1. Adozione localizzata di Blazor nella riscrittura delle sole funzionalità che richiedono maggiore interattività/dinamismo • Utilizzo dei Razor Component 2. Blazor server-side permette il riuso di codice esistente 3. Blazor ha alcune similitudini con WebForm • Mantenimento dello stato dei controlli • Modello Event-Driven Applicazione WebForm da migrare/portare verso .NET Core
  • 26. Blazor for ASP.NET Web Forms Developers • https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms- developers/ Blazor for Web Form and C# Developers • https://www.youtube.com/watch?v=gmopA3LEEeE .NET Conf 2020 - From Web Forms to Blazor - Introducing the Blazor Web Forms Components • https://channel9.msdn.com/Events/dotnetConf/2020/From-Web-Forms-to- Blazor-Introducing-the-Blazor-Web-Forms-Components Articoli e video
  • 27. "A collection of Blazor components that emulate the web forms components of the same name" https://github.com/FritzAndFriends/BlazorWebFormsComponents BlazorWebFormsComponents
  • 28. HUNEXT: Porting di applicativi desktop (vb6, access) Scenario _2
  • 29. Premesse • Gli applicativi utilizzando un database SQL Server • Parte dell'accesso ai dati esistenti sfrutta .NET e CQRS Utilizzo di Blazor Server (ad oggi) • Riuso di codice esistente • Riuso di conoscenze interne all'azienda • C# • CQRS • Permette di avere una UI che si avvicini (ad usabilità) a quella desktop Porting di applicativi desktop verso Blazor
  • 30. Per velocizzare il porting degli applicativi Access, è stato creato un template replicabile, così da poter applicare un generatore di codice. • Il generatore, legge la struttura delle maschere di Access e genera codice C# e Blazor Porting di applicativi desktop - da dove siamo partiti
  • 31. • .NET Conf 2020 - Migrating a Windows Forms App to Blazor: The Amazing and True Story of GIFBot • James Montemagno / Georgia Nelson • https://www.youtube.com/watch?v=NRDdu67VJH0 Migrating a Windows Forms App to Blazor
  • 33. Quantumdatis: Sviluppo Data Driven Manager Scenario _3
  • 34. Passaggio al web di un team desktop
  • 35. Passaggio al web di un team desktop
  • 36. Utilizzo di Blazor Server Riuso di conoscenze che il team già utilizza • C# • Codice di accesso ai dati • Chiamare a servizi REST Formazione per le caratteristiche di ASP.NET utili all'obiettivo • Dependency Injection • Blazor • Razor Affiancamento durante la realizzazione della prima versione Passaggio al web di un team desktop
  • 38. Non tutte le applicazioni necessitano della miglior tecnologia per ogni sua parte • La "miglior tecnologia" va valutata caso per caso Utilizzando C# sia per back-end (ASP.NET Core) che front-end (Blazor) • Meno tecnologie da dover conoscere e mantenere • Riduzione delle competenze necessarie • Semplificazione nel deployment Ridurre lo stack tecnologico
  • 41. Publish a Blazor WebAssembly app and .NET API with Azure Static Web Apps • https://docs.microsoft.com/en-us/learn/modules/publish-app-service-static-web- app-api-dotnet/ Azure Static Web Apps with .NET and Blazor • https://devblogs.microsoft.com/aspnet/azure-static-web-apps-with-blazor/ Static Web Apps
  • 43. Le maggiori aziende (DevExpress, Telerik, Syncfusion, …) hanno la loro libreria per Blazor • https://www.devexpress.com/blazor/ • https://www.telerik.com/blazor-ui • https://www.syncfusion.com/blazor-components Sono nate molte librerie open-source • Radzen (https://blazor.radzen.com/ ) • Blazorise (https://blazorise.com/ ) • MatBlazor (https://www.matblazor.com/ ) • Material.Blazor (https://material-blazor.com/ ) • Exentials.MdcBlazor (https://github.com/exentials/MdcBlazor ) • … !! Attenzione alla maturità della libreria che scegliete di utilizzare !! Attenzione ad usare framework JavaScript che modificano il DOM Librerie di UI
  • 46. www.dottor.net [email protected] @dottor Andrea Dottor Microsoft MVP Developer Technologies Contatti Images from https://pixabay.com
  • 47. Podcast ".NET in Pillole" • DEV.is.it - .NET in pillole • Spotify: https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ • Spreaker: https://www.spreaker.com/show/net-in-pillole • Apple podcast: https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398 • Google podcast: https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3cvMzY4NTM0NC9lcGlzb2Rlcy9mZWVk • YouTube: https://www.youtube.com/user/andreadottor/