Ngữ cảnh: trong dự án thường sẽ sử dụng nhiều ngôn ngữ như c#.net core để làm việc ở phía backend và Javascript các thư viện, framework như reactjs, angular để làm việc ở phía frontend
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO GIỮA KÌ
CÔNG NGHỆ NET
Đề tài:
Tìm hiểu Blazor trong NET Core 6.0
Thành phố Hồ Chí Minh, ngày 20 tháng 11 năm 2022
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO GIỮA KÌ
Giáo viên hướng dẫn: Thầy Lương Trần Hy Hiến.
Thành phố Hồ Chí Minh, ngày 20 tháng 11 năm 2022
Trang 3LỜI CẢM ƠN
"Đầu tiên, em xin gửi lời cảm ơn chân thành đến Trường Đại học Sư Phạm đã đưa môn học Công nghệ NET vào trương trình giảng dạy Đặc biệt, em xin gửi lời cảm ơn sâu sắc đến giảng viên bộ môn – Thầy Lương Trần Hy Hiến đã dạy dỗ, truyền đạt những kiến thức quý báu cho em trong suốt thời gian học tập vừa qua Trong thời gian tham gia lớp học Công nghệ NET của thầy, em đã có thêm cho mình nhiều kiến thức bổ ích, tinh thần học tập hiệu quả, nghiêm túc Đây chắc chắn sẽ là những kiến thức quý báu, là hành trang để em có thể vững bước sau này.
Bộ môn Công nghệ NET là môn học thú vị, vô cùng bổ ích Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn của sinh viên Tuy nhiên, do vốn kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều bỡ ngỡ Mặc dù nhóm em đã cố gắng hết sức nhưng chắc chắn đồ án khó có thể tránh khỏi những thiếu sót và nhiều chỗ còn chưa chính xác, kính mong thầy xem xét và góp ý để bài tiểu luận của em được hoàn thiện hơn
Em xin chân thành cảm ơn!”
Trang 4Mục lục
Chương 1 GIỚI THIỆU 6
1.1 Blazor là gì ? 6
Blazor là mã nguồn mở 6
1.2 Blazor không phải là gì 7
1.3 Blazor cho phép: 8
1.4 Các thành phần: 8
Chương 2 ỨNG DỤNG BLAZOR: 9
2.1 Blazor WebAssembly (client side blazor) 9
2.1.1 Điểm mạnh của Blazor WebAssembly: (Benefits) 12
2.1.2 Điểm yếu của Blazor WebAssembly:(Downsides) 12
Mô hình lưu trữ 12
2.1.3 Một số file trong cấu trúc của project webAssembly 12
2.2 Blazor Server 14
2.2.1 Điểm mạnh của Server-Side Blazor: (Benefits) 15
2.2.2 Điểm yếu của Server-Side Blazor:(Downsides) 15
2.2.3 Một số file trong cấu trúc của project Server-Side Blazor 15
2.3 Blazor Hybrid: 19
2.4 Nên chọn mô hình lưu trữ Blazor nào? 20
Chương 3 XÂY DỰNG ỨNG DỤNG BLAZOR ĐẦU TIÊN 21
3.1 Tải xuống và cài đặt: 21
3.2 Tạo ứng dụng 21
3.3 Chạy ứng dụng: 24
TÀI LIỆU THAM KHẢO 25
Trang 5Mục lục hình ảnh theo chương
Hình 1-1 Giới thiệu blazor 6
Hình 1-2 Số liệu về sự phát triển của blazor 7
Hình 2-1 Blazor WebAssembly 9
Hình 2-2 Cách hoạt động của WebAssembly 10
Hình 2-3 Cấu trúc folder Pages 14
Hình 2-4 Blazor Server 14
Hình 2-5 Cấu trúc Project Blazor Server 16
Hình 2-6 File Host 17
Hình 2-7 Cấu trúc File Pages 18
Hình 2-8 Blazor Hybrid 19
Hình 3-1 Hướng dẫn cài đặt 21
Hình 3-2 Hướng dẫn tạo project 22
Hình 3-3 Hướng dẫn tạo project Blazor Server 22
Hình 3-4 Khởi tạo project hoàn chỉnh 23
Hình 3-5 Cấu trúc của project vừa tạo 23
Hình 3-6 Chạy project 24
Hình 3-7 Thay đổi mã đang chạy 24
Hình 3-8 Dừng chạy 24
Hình 3-9 Hello World !!! 25
Trang 6Chương 1 GIỚI THIỆU
1.1 Blazor là gì ?
Ngữ cảnh: trong dự án thường sẽ sử dụng nhiều ngôn ngữ như c#(.net core) để làm
việc ở phía backend và Javascript (các thư viện, framework như reactjs, angular) để làm việc ở phía frontend Muốn làm việc, tương tác được với giao diện bắt buộc phải biết kiến thức về ngôn ngữ Javascript
Mong muốn: Sử dụng ngôn ngữ c# có thể lập trình ở cả backend và frontend Có thể
thực hiện các tương tác UI bằng c# code Vậy là Blazor ra đời để đáp ứng mong muốn này
Blazor là một web framework cho phép lập trình viên tương tác, làm việc với UI bằng
Trang 7Blazor là một khuôn khổ để xây dựng giao diện người dùng web phía máy khách tươngtác với.NET:
Tạo giao diện người dùng tương tác phong phú bằng C# thay vì JavaScript
Chia sẻ logic ứng dụng phía máy chủ và phía máy khách được viết bằng NET
Hiển thị giao diện người dùng dưới dạng HTML và CSS để hỗ trợ trình duyệtrộng rãi, bao gồm cả trình duyệt di động
Tích hợp với các nền tảng lưu trữ hiện đại, chẳng hạn nhưDocker
Xây dựng các ứng dụng kết hợp dành cho máy tính để bàn và thiết bị di độngvới NET và Blazor
Sử dụng NET để phát triển web phía máy khách mang lại những lợi thế sau:
Viết mã bằng C# thay vì JavaScript
Tận dụng hệ sinh thái NET hiện có của.NET thư viện
Chia sẻ logic ứng dụng trên máy chủ và máy khách
Hưởng lợi từ các tệp Hiệu suất, độ tin cậy và bảo mật của NET
Làm việc hiệu quả trên Windows, Linux hoặc macOS với môi trường phát triển,chẳng hạn nhưVisualStudio hoặcVisual Studio Code
Xây dựng dựa trên một bộ ngôn ngữ, khuôn khổ và công cụ chung ổn định, giàutính năng và dễ sử dụng
1.2 Blazor so với Silverlight
Blazor không giống như Silverlight, nỗ lực trước đây của Microsoft trong việc lưu trữcác ứng dụng trong trình duyệt Silverlight yêu cầu plugin trình duyệt để chạy trênứng dụng khách, điều này đã ngăn không cho nó chạy trên thiết bị iOS
Blazor không yêu cầu bất kỳ loại plugin nào được cài đặt trên máy khách để thực thibên trong trình duyệt Blazor hoặc chạy phía máy chủ, trong trường hợp đó, nó thựcthi trên máy chủ và trình duyệt hoạt động như một thiết bị đầu cuối hoặc nó chạytrong chính trình duyệt bằng cách sử dụng WebAssembly
Hình 1-2 Số liệu về sự phát triển của blazor
Trang 8Vì WebAssugging là một tiêu chuẩn web nên nó được hỗ trợ trên tất cả các trìnhduyệt chính, điều đó có nghĩa là các ứng dụng Blazor phía máy khách cũng sẽ chạybên trong trình duyệt trên Windows/Linux/Mac/Android và iOS.
1.3 Blazor cho phép:
Tương tác với UI bằng c# code, không yêu cầu Javascript
Sử dụng Razor Component (razor cho phép trộn code c# và html)
Tận dụng sức mạnh của thư viện, framework net trong ứng dụng Blazor
Có 2 loại ứng dụng Blazor: Blazor WebAssembly(client side) và BlazorServer(server side)
Blazor Server: Là ứng dụng Blazor được chạy trên server generate và update DOM sử dụng SignalrR
Blazor Web Assembly: Là ứng dụng Single Page Application client generate như bất cứ SPA nào được xây dựng bằng các frontend framework khác
1.4 Các thành phần:
Các ứng dụng Blazor dựa trên các thành phần Một thành phần trong Blazor là mộtthành phần của giao diện người dùng, chẳng hạn như trang, hộp thoại hoặc biểu mẫunhập dữ liệu
Các thành phần là các lớp NET C# được tích hợp trong các tập hợp NET :
Xác định logic hiển thị giao diện người dùng linh hoạt
Xử lý các sự kiện của người dùng
Có thể được lồng vào nhau và tái sử dụng
Có thể được chia sẻ và phân phối dưới dạng thư viện lớp Razor hoặc gói NuGet
Lớp thành phần thường được viết dưới dạng trang đánh dấu Razor.razor với phần mởrộng tệp Các thành phần trong Blazor được gọi chính thức là các thành phần Razor ,không chính thức là các thành phần Blazor
Razor là một cú pháp để kết hợp đánh dấu HTML với mã C# được thiết kế cho năngsuất của nhà phát triển
Razor cho phép bạn chuyển đổi giữa đánh dấu HTML và C# trong cùng một tệp với
hỗ trợ lập trình IntelliSense trong Visual Studio Razor Pages và MVC cũng sử dụngRazor
Không giống như Razor Pages và MVC, được xây dựng xung quanh mô hình yêucầu/phản hồi, các thành phần được sử dụng riêng cho logic và thành phần giao diệnngười dùng phía máy khách
Blazor sử dụng các thẻ HTML tự nhiên để tạo thành phần giao diện người dùng Các thành phần kết xuất thành biểu diễn trong bộ nhớ của Mô hình đối tượng tài liệu (DOM) của trình duyệt được gọi là cây kết xuất, được sử dụng để cập nhật giao diện người dùng theo cách linh hoạt và hiệu quả
Trang 9Chương 2 ỨNG DỤNG BLAZOR:
2.1 Blazor WebAssembly (client side blazor)
Hình 2-3 Blazor WebAssembly
WebAssembly (gọi tắt là Wasm) là một dạng mã máy nhị phân (bytecode) Các đoạn
mã code viết bằng các ngôn ngữ như (C/C++, Rust, C# ) sẽ biên dịch thành dạng mãnhị phân nhờ vào Wasm mà trình duyệt (browser) có thể hiểu được Hầu hết các trìnhduyệt hiện đại đều hỗ trợ Wasm Wasm gần giống với tập lệnh chung (Ngôn ngữtrung gian chung) mà mã nguồn NET biên dịch thành Cũng giống như NET, Wasm
có thể được tạo từ các ngôn ngữ cao hơn như C#
Trang 10Hình 2-4 Cách hoạt động của WebAssembly
Blazor WebAssembly hay còn gọi là Client Side Blazor là một khung ứng
dụng một trang (SPA) để xây dựng các ứng dụng web tương tác phía máy kháchvới NET Blazor WebAssembly sử dụng các tiêu chuẩn web mở mà không cần pluginhoặc biên dịch lại mã sang các ngôn ngữ khác Đúng như tên gọi BlazorWebAssembly chạy toàn bộ ứng dụng ở phía client trên trình duyệt dựa trênWebAssembly
Blazor WebAssembly sẽ download tất cả mọi thứ về trình duyệt(Browse) bao gồm:
Trang 12Samsung Internet 7.2
2.1.1 Điểm mạnh của Blazor WebAssembly: (Benefits)
Tốc độ ứng dụng web rất nhanh bởi code c# được biên dịch thành các đoạn mã nhị phân nhờ WebAssembly, rất gần với ngôn ngữ máy mà trình duyệt hiểu được
Website có thể hoạt động offline bởi toàn bộ mọi thứ đều được tải về trình duyệt
Hỗ trợ hầu hết các trình duyệt hiện đại (trừ internet explorer) mà không cần cài thêm bất kỳ plugin nào
Tận dụng tài nguyên ở client nên không cần server quá mạnh, có thể lấy các file static mà không cần vào server
Server không cần cài net core
2.1.2 Điểm yếu của Blazor WebAssembly:(Downsides)
Không chạy trên các trình duyệt cũ (internet explorer)
Yêu cầu WebAssembly ở browse (các trình duyệt hiện đại đều hỗ trợ)
Quá nhiều file phải download như net runtime, tốn thời gian tải trang (Từ lần
hưa hỗ trợ full debugging
Bởi vì mọi thứ đều tải về client side nên vấn đề bảo mật cần cân nhắc Ví dụ khi bạn có secret key bạn lưu vàthứ 2 nhờ có cơ chế cache nên sẽ cải thiện tốc
độ hơn lần 1)
Co file và store nó ở client rất nguy hiểm Có thể sử dụng các kỹ thuật để mã hóa(encrypt secret) nhưng vẫn không an toàn
Mô hình lưu trữ
2.1.3 Một số file trong cấu trúc của project webAssembly
index.html chứa blazor.webassembly.js javascript file File này sẽ được
download tới browser và chịu trách nhiệm download toàn bộ app assets bao gồm webAssembly byteCode và assembly của chính nó
Trang 13< html >
< meta charset = "utf-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
< title > BlazorWebAssembly </ title >
< link href = "css/bootstrap/bootstrap.min.css" rel = "stylesheet" />
< link href = "css/app.css" rel = "stylesheet" />
< app > Loading </ app >
< div id = "blazor-error-ui" >
An unhandled error has occurred.
< a href = "" class= "reload" > Reload </ a >
Trang 14Hình 2-5 Cấu trúc folder Pages
2.2 Blazor Server
Hình 2-6 Blazor Server
Đúng như tên gọi Server-Side Blazor toàn bộ code của ứng dụng sẽ chạy ở phía
Server
Balzor app xây dựng trên nền ASP.NET core và giao tiếp với browser client
qua SignalR - hỗ trợ realtime để server gửi request và update thông tin tới client.
Trang 15Ví dụ: Khi user click thêm khóa học button trên browser sẽ gửi data từ client tới server thông qua SignalR Sau khi Server nhận thông tin sẽ xử lý logic nghiệp vụ (ví
dụ lưu vào database) và trả về kết quả từ server tới client thông qua signalR, client cậpnhật kết quả vào DOM
Server application sẽ giữ trong memory mọi lúc Khi client có tương tác sẽ gửi
1 request để tạo instance cho user đó Nhiều user tương tác thì sẽ tạo nhiều instance Server-side blazor cho phép ứng dụng chạy trên server
Server blazor rất tốt cho client có tài nguyên ít, giới hạn(vì chạy toàn bộ trên server) hoặc browse không hỗ trợ WebAssembly
2.2.1 Điểm mạnh của Server-Side Blazor: (Benefits)
Số lượng file tải về browser rất ít vì toàn bộ chạy ở server
Tất cả chạy ở server nên có thể tận dụng sức mạnh của server-side api(các framework, library ở server, api của net)
Hỗ trợ full debugging
Hỗ trợ tất cả trình duyệt
Trang 16Hình 2-7 Cấu trúc Project Blazor Server
2.2.2 Điểm yếu của Server-Side Blazor:(Downsides)
Không hỗ trợ offline vì phải giữ kết nối liên tục giữa client và server qua SignalR
Nếu network chậm thì sẽ web sẽ chậm do server giao tiếp với client qua signalR
Tính mở rộng, mặc dù không phải vấn đề lớn Microsoft đưa ra hướng dẫn blazor server side hỗ trợ đồng thời hàng ngàn user Khi client có tương tác sẽ gửi 1 request để tạo instance cho user đó Server application sẽ giữ trong bộ nhớ mọi lúc Nhiều user tương tác thì sẽ tạo nhiều instance
2.2.3 Một số file trong cấu trúc của project Server-Side Blazor
Trang 17 _Host.cshtml sẽ chứa code để render html và thiết lập kết nối giữa client và
server (websocket) Trang gốc của ứng dụng được triển khai dưới dạng Razor Page:
Khi bất kỳ trang nào của ứng dụng được yêu cầu ban đầu, trang này sẽ được hiển thị và trả lại trong phản hồi
Trang Host chỉ định nơi hiển thị thành phần Ứng dụng gốc (App.razor)
Pages folder: chứa các components/pages (.razor) có thể định tuyến, tạo nên
ứng dụng Blazor và trang Razor gốc của ứng dụng Blazor Server Route cho mỗi trang được chỉ định bằng cách sử dụng chỉ thị @page
_Layout.cshtml: Trang bố cục cho trang gốc _Host.cshtml của ứng dụng.
Counter component (Counter.razor): Triển khai trang Counter.
Error component (Error.razor)::Được hiển thị khi một ngoại lệ chưa được xử
lý xảy ra trong ứng dụng
FetchData component (FetchData.razor): Triển khai trang Fetch data
Index component (Index.razor): Triển khai Trang chủ.
Properties/launchSettings.json: Giữ cấu hình môi trường phát triển.
Shared folder: Chứa các components và stylesheets được chia sẻ sau:
MainLayout component (MainLayout.razor): Thành phần bố cục của
ứng dụng
MainLayout.razor.css: Stylesheet cho bố cục chính của ứng dụng.
NavMenu component (NavMenu.razor): Triển khai sidebar
navigation Bao gồm NavLink component (NavLink), kết xuất các liên kết điều hướng đến các thành phần Razor khác Thành phần NavLink tự động chỉ ra trạng thái đã chọn khi component của nó được tải, điều này giúp người dùng hiểu thành phần nào hiện đang được hiển thị
NavMenu.razor.css: Stylesheet cho navigation menu của ứng dụng.
SurveyPrompt component (SurveyPrompt.razor): Blazor survey
component
wwwroot: Thư mục gốc Web cho ứng dụng chứa public static assets của ứng dụng
_Imports.razor: Bao gồm Razor directives chung để đưa vào các components
của ứng dụng (.razor), chẳng hạn @using directives cho namespaces
App.razor: component gốc của ứng dụng thiết lập định tuyến phía client-side
bằng Router component Router component chặn điều hướng trình duyệt và hiển thị trang khớp với địa chỉ được yêu cầu
appsettings.json và các file cài đặt ứng dụng môi trường: Cung cấp cài đặt cấu
hình cho ứng dụng
Program.cs: entry point của ứng dụng thiết lập máy chủ ASP.NET Core và
chứa logic khởi động của ứng dụng, bao gồm đăng ký dịch vụ và cấu hình quy trình xử lý yêu cầu của ứng dụng:
Trang 18Hình 2-8 File Host
Tương tự như ở WebAssembly ở folder Pages sẽ chứa các razor component
Hình 2-9 Cấu trúc File Pages
Trong startup.cs class
Chứa service để chạy được blazor server
public void ConfigureServices ( IServiceCollection services)
{
services AddRazorPages ();
services AddServerSideBlazor ();