Theme: Book travel between stars
Note: While the demo app has been updated to .NET 5 and latest version of Blazor, this storyboard has not been brought up to date!
-
Open Start solution
-
Run it, talk about use of WebAssembly
- Show browser cache with .NET assemblies
- Demo deleting cache and reloading
-
Talk about solution structure
- Backend ASP.NET Core 5
- Blazor Client
- Components (reusable UI component library)
- Model (data model, business logic)
- Server-side Blazor
-
Point out reference from Components to Model
-
Point out
@using StarshipTraveler.Model
in _Imports.razor -
Copy 010-Basic TicketList into Components/Pages
-
Talking points:
- Razor syntax (mention code-behind with inheritance)
- Reuse of existing business logic (server and client)
HttpClient
injection, interaction with browser (customHttpMessageHandler
)- Point out
async/await
programming model - Point out Linq
- JSON support
-
Copy...
- ...020-UI Composition/TicketCard.razor and TicketQRCode.razor and TicketList.razor into Components
-
Talking points:
- Reusable component libraries
- Growing 3rd party ecosystem of components
- UI composition
- Parameters from parent to child components
-
Copy...
- ...030-Parent-Child/TimeSelector.razor and TicketList.razor into Components
-
Talking points:
- Enabling two-way binding with parameters (in TimeSelector and TicketList)
- Class bindings
- Manual refreshing of bindings with
StateHasChanged
-
Copy...
- ...040-Router/BaseImage.razor and TicketDetails.razor into Components
-
Talking points:
- Route parameter
- Parallel web requests with
Task
-based programming model - Links using
a href
(TicketQRCode.razor)
-
Show TicketList.razor.g.cs in StarshipTraveler.Components\obj\Debug\netstandard2.0\Razor\Pages
-
Talking points:
- cshtml becomes C# classes
- Attributes for Routing, Layouting, DI, etc.
-
Copy...
- ...050-Razor Compiler/FlightNetwork.cs and Network.razor into Components
- ...050-Razor Compiler/Flightplan.cs into Model
-
Add
builder.Services.AddScoped<IFlightplan, Flightplan>();
to Client/Startup.cs -
Add
services.AddSingleton<IFlightplan, Flightplan>();
to ServerSide/Startup.cs -
Talking points:
- C#-only components (FlightNetwork.cs and Network.razor)
- Render Trees
- DI for application services (
IFlightplan
)
-
Copy 060-Forms-Validation/BookTicket.razor into Components
-
Talking points:
- Blazor forms and validation engine
- Data annotation
- Central validation logic
- Used in client and server (see requests.http)
-
Point out JavaScript in StarshipTraveler.Client\wwwroot\index.html
-
Point out NuGet reference to Dijkstra.NET in Model
-
Copy...
- ...070-JS Interop/BookTicket.razor into Components
- ...070-JS Interop/Flightplan.cs into Model
-
Let Luke Skywalker travel from Tatooine to Earth
-
Talking points:
- Benefit from large C# ecosystem of business logic libraries
- JS interop to interact with (existing) JavaScript
-
Copy...
- ...080-ApiService/IStarshipApi.cs and 080-ApiService/StarshipApi.cs to Model
- ...080-ApiService/Data/StarshipApi.cs to Client/Data
- ...all files from 080-ApiService/Pages/ to Components/Pages
-
Add
builder.Services.AddScoped<IStarshipApi, StarshipApi>();
to Client/Startup.cs -
Add
services.AddSingleton<IStarshipApi, StarshipApi>();
to ServerSide/Startup.cs -
Talking points:
- Reuse of
HttpClient
in WASM - Reuse of existing API clients that build on
HttpClient
- Reuse of
-
Copy StarshipTraveler.ServerSide project into solution folder
-
Add StarshipTraveler.ServerSide to solution
-
Run server-side solution and show Websockets traffic
-
Talking points:
- Reuse of Components
- Get production support today, switch to WASM later
-
Build API (can be done before presentation):
docker build -f Api.Dockerfile -t starshipapi .
- Discuss Dockerfile for .NET 5
-
Run API:
docker run -t -p 5000:80 --rm --name starshipapi starshipapi
-
(Optionally) Publish API:
docker tag starshipapi rstropek/starshipapi docker push rstropek/starshipapi
-
Build Client:
docker build -f Client.Dockerfile -t starshipclient .
- Discuss Dockerfile for Blazor WASM
-
Run client:
docker run -t -p 5002:80 --rm --name starshipclient starshipclient
- Show that client accesses API in cloud
- Discuss smaller footprint
-
(Optionally) Publish client:
docker tag starshipclient rstropek/starshipclient docker push rstropek/starshipclient
-
Build Server:
docker build -f Server.Dockerfile -t starshipserver .
- Discuss Dockerfile for Blazor WASM
-
Run client:
docker run -t -p 5004:80 --rm --name starshipserver starshipserver
- Show that server accesses API from backend
- Discuss WebSocket connection
-
(Optionally) Publish client:
docker tag starshipserver rstropek/starshipserver docker push rstropek/starshipserver