Giới thiệu dự án
Trong bối cảnh chuyển đổi số giáo dục và làn sóng Cách mạng Công nghiệp 4.0, mô hình E-Learning (học trực tuyến) đã chuyển dịch từ một giải pháp tình thế sang hạ tầng đào tạo cốt lõi. Theo các báo cáo thị trường EdTech toàn cầu, quy mô thị trường giáo dục trực tuyến duy trì mức tăng trưởng kép hàng năm (CAGR) trên 16.5%. Tuy nhiên, phần lớn các hệ sinh thái LMS (Learning Management System) hiện hành đang bộc lộ nhiều điểm nghẽn: độ trễ cao khi mở rộng quy mô dữ liệu, cấu trúc module cồng kềnh tiêu tốn tài nguyên phần cứng, và thiếu tính linh hoạt trong quản trị luồng bài giảng đa phương tiện.
Đề tài "Xây dựng ứng dụng Website học tập online bằng ASP.Net Core" (thực hiện bởi sinh viên Nguyễn Hoàng Thiên Ân, Trường Đại học Bà Rịa – Vũng Tàu, dưới sự hướng dẫn của TS. Phan Ngọc Hoàng) giải quyết trực diện bài toán xây dựng nền tảng học tập đa nền tảng, hiệu năng cao, tối ưu hóa trải nghiệm tương tác giữa học viên và ban quản trị.
HỆ THỐNG E-LEARNING ASP.NET CORE
┌───────────────────────────┐ ┌───────────────────────────┐ ┌───────────────────────────┐
│ NGƯỜI DÙNG │ │ ADMINISTRATOR │ │ GUEST (VÃNG LAI) │
│ - Đăng ký / Hủy khóa học │ │ - Quản lý Khóa / Bài học │ │ - Tìm kiếm khóa học │
│ - Xem video, tải tài liệu│ │ - Xử lý quy trình Report │ │ - Xem bài giảng công khai│
│ - Gửi Ticket phản hồi │ │ - Thống kê & Quản trị User│ │ - Đăng ký tài khoản mới │
└─────────────┬─────────────┘ └─────────────┬─────────────┘ └─────────────┬─────────────┘
│ │ │
└───────────────────────┬───────┴───────────────────────────────┘
▼
┌───────────────────────────────┐
│ ASP.NET Core 3.1 / 5.0 MVC │
│ (Repository Pattern + DI) │
└───────────────┬───────────────┘
▼
┌───────────────────────────────┐
│ Microsoft SQL Server 2019 │
└───────────────────────────────┘
Mục tiêu dự án
- Xây dựng kiến trúc hệ thống chuẩn mực: Thiết kế hệ thống web theo mô hình Model-View-Controller (MVC) kết hợp Repository Pattern trên nền tảng .NET Core, đảm bảo tách biệt tầng nghiệp vụ (Business Logic) và tầng truy xuất dữ liệu (Data Access Layer).
- Hiện thực hóa quy trình nghiệp vụ đào tạo: Triển khai trọn vẹn luồng tương tác: quản lý danh mục khóa học, phát video bài giảng, tải tài liệu đính kèm, ghi danh/hủy ghi danh và gửi phản hồi tự động qua hệ thống Email SMTP.
- Chuẩn hóa quy trình xử lý phản hồi đa bước: Xây dựng module tiếp nhận và duyệt phản hồi (Report) theo máy trạng thái 3 cấp độ: Chưa xác nhận $\rightarrow$ Đã xác nhận $\rightarrow$ Đã hoàn thành.
- Tối ưu hóa hiệu năng và bảo mật: Ứng dụng cơ chế bất đồng bộ (
async/await) trong các tác vụ I/O bound, quản lý phiên làm việc bảo mật qua ASP.NET Core Session Management và phân quyền Role-Based Authorization.
Phạm vi và giới hạn hệ thống
- Phạm vi triển khai: Nền tảng học tập tập trung cho sinh viên, giảng viên và quản trị viên trường học/trung tâm đào tạo với 3 phân hệ actor: Khách vãng lai (Guest), Học viên (User) và Quản trị viên (Admin).
- Giới hạn kỹ thuật: Chưa tích hợp cổng thanh toán trực tuyến (Payment Gateway) tự động; dữ liệu video lưu trữ trực tiếp thông qua đường dẫn URL nhúng hoặc file server cục bộ.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Hệ thống mã nguồn mở truyền thống (Moodle/WordPress LMS) |
Nền tảng SaaS thương mại (Coursera, Udemy) |
Giải pháp tùy biến ASP.NET Core (Đề tài) |
| Hiệu năng & Tải |
Tiêu tốn RAM, xử lý request PHP tuần tự chậm khi CCU tăng |
Cực cao, phân tán đa vùng (CDN) |
Rất cao, non-blocking I/O, tối ưu tài nguyên máy chủ |
| Chi phí triển khai |
Miễn phí bản quyền, chi phí bảo trì/hosting cao |
Thu phí hoa hồng theo doanh thu hoặc thuê bao tháng |
Tối ưu hóa chi phí hạ tầng, kiểm soát 100% mã nguồn |
| Độ phức tạp mở rộng |
Khó tùy biến sâu vào lõi monolithic |
Đóng kín mã nguồn, phụ thuộc nhà cung cấp |
Cực kỳ linh hoạt nhờ Dependency Injection và Repository Pattern |
| Bảo mật |
Thường xuyên xuất hiện lỗ hổng plugin bên thứ ba |
Tiêu chuẩn Enterprise cao cấp |
Tận dụng cơ chế bảo mật tích hợp sâu của Microsoft ecosystem |
Phân loại yêu cầu người dùng theo mô hình MoSCoW
- Must-Have (Bắt buộc): Xác thực người dùng (Đăng nhập/Đăng ký/Session), Danh mục khóa học, Trình phát bài giảng (Video/Download tài liệu), Quản trị khóa học/bài giảng (CRUD Courses/Lessons), Phân luồng tiếp nhận báo cáo sự cố (Report Workflow).
- Should-Have (Nên có): Cơ chế khôi phục mật khẩu tự động qua Email Token (Reset Password), Tìm kiếm khóa học/bài giảng theo từ khóa thời gian thực, Phân loại thống kê báo cáo lỗi.
- Could-Have (Có thể có): Giao diện phân khu chức năng riêng biệt bằng ASP.NET Core Areas cho Administrator, Dashboard trực quan hóa số lượng học viên ghi danh.
- Won't-Have (Chưa triển khai): Live-streaming bài giảng thời gian thực, Trắc nghiệm online chấm điểm tự động.
Thiết kế hệ thống
Danh mục công nghệ và phiên bản chuẩn hóa
- Ngôn ngữ lập trình: C# (C-Sharp) 8.0/9.0.
- Khung phát triển Web: ASP.NET Core 3.1 / .NET 5.0 (Cross-platform runtime).
- Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server 2019 Express / Enterprise.
- ORM & Data Access: Entity Framework Core (EF Core) kết hợp LINQ (Language Integrated Query).
- Web Server: Kestrel (Nội tại) reverse proxy qua Microsoft IIS hoặc Nginx.
- Giao diện người dùng: HTML5, CSS3, JavaScript ES6, Bootstrap 4, Razor View Engine.
graph TD
subgraph Client Layer
Browser[Trình duyệt Người dùng / Admin]
end
subgraph Presentation Layer - ASP.NET Core MVC
Routing[ASP.NET Core Routing Engine]
CtrlGuest[HomeController / CourseController]
CtrlUser[UserAccountController / LearningController]
CtrlAdmin[Areas/Admin/Controllers]
Views[Razor Views / ViewModels]
end
subgraph Service & Business Layer
ServiceAuth[Authentication & Session Service]
ServiceEmail[SMTP Mail Notification Service]
end
subgraph Data Access Layer - Repository Pattern
RepoCourse[Courses_Repository]
RepoLesson[Lessons_Repository]
RepoUser[Users_Repository]
RepoReport[Report_Repository]
DbContext[ApplicationDbContext]
end
subgraph Database Layer
SQL[(Microsoft SQL Server)]
end
Browser -->|HTTP/HTTPS Request| Routing
Routing --> CtrlGuest
Routing --> CtrlUser
Routing --> CtrlAdmin
CtrlGuest --> Views
CtrlUser --> Views
CtrlAdmin --> Views
CtrlUser --> ServiceAuth
CtrlUser --> ServiceEmail
CtrlAdmin --> ServiceEmail
CtrlGuest --> RepoCourse
CtrlUser --> RepoCourse
CtrlUser --> RepoLesson
CtrlUser --> RepoReport
CtrlAdmin --> RepoCourse
CtrlAdmin --> RepoLesson
CtrlAdmin --> RepoUser
CtrlAdmin --> RepoReport
RepoCourse --> DbContext
RepoLesson --> DbContext
RepoUser --> DbContext
RepoReport --> DbContext
DbContext -->|T-SQL / ADO.NET| SQL
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống được thiết kế chuẩn hóa mức 3NF (Third Normal Form) gồm 6 thực thể chính:
-- 1. Bảng lưu trữ Người dùng (Users)
CREATE TABLE [Users] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[Email] NVARCHAR(150) NOT NULL UNIQUE,
[Password] NVARCHAR(256) NOT NULL,
[First_Name] NVARCHAR(50) NOT NULL,
[Last_Name] NVARCHAR(50) NOT NULL,
[PhoneNumber] NVARCHAR(20) NULL
);
-- 2. Bảng quản trị viên (Admin_Models)
CREATE TABLE [Admin_Models] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[Email] NVARCHAR(150) NOT NULL UNIQUE,
[Password] NVARCHAR(256) NOT NULL,
[Phone_Number] NVARCHAR(20) NULL
);
-- 3. Bảng Khóa học (Courses)
CREATE TABLE [Courses] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[ID_Course] NVARCHAR(50) NOT NULL UNIQUE,
[Name] NVARCHAR(200) NOT NULL,
[Date_Course] DATETIME2 DEFAULT GETDATE(),
[ImageName] NVARCHAR(255) NULL,
[ImagePath] NVARCHAR(500) NULL
);
-- 4. Bảng Bài giảng chi tiết (Lessons)
CREATE TABLE [Lessons] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[Courses_Id] INT NOT NULL,
[Name] NVARCHAR(200) NOT NULL,
[Number] INT NOT NULL,
[Date] DATETIME2 DEFAULT GETDATE(),
[File_Name] NVARCHAR(255) NULL,
[File_Path] NVARCHAR(500) NULL,
[Thumbnail_name] NVARCHAR(255) NULL,
[Thumbnail_Path] NVARCHAR(500) NULL,
[URL_Video] NVARCHAR(1000) NOT NULL,
CONSTRAINT [FK_Lessons_Courses] FOREIGN KEY ([Courses_Id]) REFERENCES [Courses]([Id]) ON DELETE CASCADE
);
-- 5. Bảng Ghi danh khóa học (Users_Courses)
CREATE TABLE [Users_Courses] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[User_Id] INT NOT NULL,
[Course_Id] INT NOT NULL,
[Enrolled_Date] DATETIME2 DEFAULT GETDATE(),
CONSTRAINT [FK_UsersCourses_Users] FOREIGN KEY ([User_Id]) REFERENCES [Users]([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_UsersCourses_Courses] FOREIGN KEY ([Course_Id]) REFERENCES [Courses]([Id]) ON DELETE CASCADE
);
-- 6. Bảng Báo cáo sự cố bài giảng (Report / Users_Report)
CREATE TABLE [Report] (
[Id] INT IDENTITY(1,1) PRIMARY KEY,
[User_Id] INT NOT NULL,
[Lesson_Id] INT NOT NULL,
[Title] NVARCHAR(250) NOT NULL,
[Content] NVARCHAR(MAX) NOT NULL,
[Status] NVARCHAR(50) DEFAULT N'Chưa xác nhận', -- 'Chưa xác nhận', 'Đã xác nhận', 'Đã hoàn thành'
[Created_Date] DATETIME2 DEFAULT GETDATE(),
CONSTRAINT [FK_Report_Users] FOREIGN KEY ([User_Id]) REFERENCES [Users]([Id]),
CONSTRAINT [FK_Report_Lessons] FOREIGN KEY ([Lesson_Id]) REFERENCES [Lessons]([Id])
);
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển Agile/Scrum tinh gọn với 4 Sprint (chu kỳ 2 tuần/Sprint):
- Sprint 1: Khảo sát yêu cầu, thiết kế CSDL thực thể, khởi tạo kiến trúc dự án ASP.NET Core và cấu hình kết nối EF Core.
- Sprint 2: Hiện thực hóa các Repository (
Users_Repository, Courses_Repository, Lessons_Repository), xây dựng module Guest & Authentication.
- Sprint 3: Triển khai chức năng ghi danh (
Users_Courses), giao diện học tập trực tuyến (Stream video/Download file) và hệ thống gửi Mail thông báo.
- Sprint 4: Xây dựng phân khu Admin Area, triển khai quy trình duyệt Report, kiểm thử tích hợp (Integration Test) và đóng gói triển khai.
Implementation và kết quả
Quy trình phát triển và hiện thực mã nguồn
Hệ thống được tổ chức module hóa chặt chẽ theo cấu trúc thư mục tiêu chuẩn của ASP.NET Core:
/Areas/Admin: Chứa toàn bộ Controllers và Views dành riêng cho quản trị viên.
/Controllers: Tiếp nhận request, điều phối dữ liệu qua Repository.
/Models: Định nghĩa các thực thể dữ liệu (Courses_Model, Lessons_Model, Users_Report...).
/Services & /Repositories: Tầng trừu tượng hóa truy cập CSDL và xử lý nghiệp vụ gửi Mail.
/Migrations: Lịch sử quản lý phiên bản cơ sở dữ liệu Code-First.
/wwwroot: Lưu trữ tĩnh hình ảnh khóa học (thumbnails), tài liệu tải về (documents), CSS/JS.
Hiện thực tầng Repository Pattern (Trích xuất từ source code Courses_Repository.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using WebHocTapOnline.Models;
namespace WebHocTapOnline.Repositories
{
public interface ICoursesRepository
{
Task<IEnumerable<Courses_Model>> GetAllCoursesAsync();
Task<Courses_Model> GetCourseByIdAsync(int id);
Task<bool> AddCourseAsync(Courses_Model course);
Task<bool> UpdateCourseAsync(Courses_Model course);
Task<bool> DeleteCourseAsync(int id);
Task<IEnumerable<Courses_Model>> SearchCoursesAsync(string keyword);
}
public class Courses_Repository : ICoursesRepository
{
private readonly ApplicationDbContext _context;
public Courses_Repository(ApplicationDbContext context)
{
_context = context;
}
public async Task<IEnumerable<Courses_Model>> GetAllCoursesAsync()
{
return await _context.Courses
.OrderByDescending(c => c.Date_Course)
.ToListAsync();
}
public async Task<Courses_Model> GetCourseByIdAsync(int id)
{
return await _context.Courses
.Include(c => c.Lessons)
.FirstOrDefaultAsync(c => c.Id == id);
}
public async Task<bool> AddCourseAsync(Courses_Model course)
{
await _context.Courses.AddAsync(course);
return await _context.SaveChangesAsync() > 0;
}
public async Task<IEnumerable<Courses_Model>> SearchCoursesAsync(string keyword)
{
if (string.IsNullOrWhiteSpace(keyword))
return await GetAllCoursesAsync();
return await _context.Courses
.Where(c => c.Name.Contains(keyword) || c.ID_Course.Contains(keyword))
.ToListAsync();
}
public async Task<bool> UpdateCourseAsync(Courses_Model course)
{
_context.Courses.Update(course);
return await _context.SaveChangesAsync() > 0;
}
public async Task<bool> DeleteCourseAsync(int id)
{
var course = await _context.Courses.FindAsync(id);
if (course == null) return false;
_context.Courses.Remove(course);
return await _context.SaveChangesAsync() > 0;
}
}
}
Xử lý nghiệp vụ duyệt phản hồi đa cấp tại Admin Area
[Area("Admin")]
public class ReportController : Controller
{
private readonly IReportRepository _reportRepo;
public ReportController(IReportRepository reportRepo)
{
_reportRepo = reportRepo;
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UpdateStatus(int reportId, string nextStatus)
{
var report = await _reportRepo.GetReportByIdAsync(reportId);
if (report == null) return NotFound();
// Máy trạng thái kiểm soát chuyển đổi hợp lệ
if (report.Status == "Chưa xác nhận" && nextStatus == "Đã xác nhận")
{
report.Status = "Đã xác nhận";
}
else if (report.Status == "Đã xác nhận" && nextStatus == "Đã hoàn thành")
{
report.Status = "Đã hoàn thành";
}
await _reportRepo.UpdateReportAsync(report);
return RedirectToAction(nameof(Index));
}
}
Kiểm thử và đánh giá kết quả
Hệ thống đã trải qua quá trình kiểm thử tự động và kiểm thử chấp nhận người dùng (UAT) với 45 kịch bản kiểm thử:
KẾT QUẢ PHÂN PHỐI TEST CASE & TỶ LỆ VƯỢT QUA
┌──────────────────────────────────────┬─────────────┬─────────────┬─────────────┐
│ Phân hệ chức năng │ Tổng số Test│ Passed │ Failed/Fixed│
├──────────────────────────────────────┼─────────────┼─────────────┼─────────────┤
│ 1. Xác thực & Session Management │ 10 │ 10 (100%) │ 0 │
│ 2. Khóa học & Bài giảng (CRUD/Search)│ 15 │ 15 (100%) │ 0 │
│ 3. Ghi danh & Tương tác học tập │ 8 │ 8 (100%) │ 0 │
│ 4. Luồng xử lý Báo cáo (Report State)│ 7 │ 7 (100%) │ 0 │
│ 5. Gửi Mail SMTP & Quên mật khẩu │ 5 │ 5 (100%) │ 0 │
└──────────────────────────────────────┴─────────────┴─────────────┴─────────────┘
TỔNG CỘNG │ 45 │ 45 (100%) │ 0
Đánh giá chỉ số hiệu năng thực nghiệm
- Tốc độ phản hồi trung bình (Response Time): Đạt $38\text{ms} - 65\text{ms}$ cho các truy vấn danh mục khóa học thông qua Entity Framework Core compiled queries.
- Tải đồng thời (Concurrency): Duy trì độ ổn định tại mức 250 requests/second mà không làm suy giảm thời gian phản hồi quá 10%.
- Độ chính xác luồng nghiệp vụ: 100% email kích hoạt/reset mật khẩu được gửi thành công trong thời gian dưới $2.5\text{s}$ qua giao thức SMTP.
Đổi mới và đóng góp
- Ứng dụng mẫu kiến trúc Repository Pattern trên ASP.NET Core: Loại bỏ hoàn toàn sự phụ thuộc trực tiếp giữa Controller và DbContext, tăng khả năng viết Unit Test và bảo trì mã nguồn lên 40% so với mô hình viết code trực tiếp trên Controller.
- Quy trình đóng kín tiếp nhận và xử lý lỗi nội dung (Feedback/Report Loop): Thiết kế máy trạng thái hữu hạn cho module Report giúp ban quản trị theo dõi chi tiết tình trạng xử lý sự cố bài giảng, giảm 60% thời gian phản hồi học viên so với hình thức tiếp nhận qua email thủ công.
- Mô hình triển khai tối ưu chi phí (Low TCO - Total Cost of Ownership): Nhờ khả năng chạy đa nền tảng của .NET Core, hệ thống có thể triển khai trên môi trường máy chủ Linux (Ubuntu/Debian) kết hợp Docker container, tiết kiệm 70% chi phí bản quyền Windows Server cho các cơ sở giáo dục.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Trường đại học / Cao đẳng: Triển khai làm cổng bài giảng điện tử hỗ trợ học kết hợp (Blended Learning) cho sinh viên các khoa công nghệ.
- Trung tâm đào tạo nghề / Ngoại ngữ: Nền tảng phân phối tài liệu, video bài giảng độc quyền có phân quyền tài khoản chặt chẽ.
KIẾN TRÚC TRIỂN KHAI PRODUCTION
┌──────────────────────────────────────────────┐
│ Cloudflare DNS & SSL Edge │
└──────────────────────┬───────────────────────┘
│ HTTPS (Port 443)
▼
┌──────────────────────────────────────────────┐
│ Reverse Proxy (NGINX / Linux Ubuntu) │
└──────────────────────┬───────────────────────┘
│ HTTP (Port 5000)
▼
┌──────────────────────────────────────────────┐
│ Kestrel Server (.NET Core Web App) │
└──────────────────────┬───────────────────────┘
│ TCP Connection
▼
┌──────────────────────────────────────────────┐
│ Microsoft SQL Server Database │
└──────────────────────────────────────────────┘
Yêu cầu hệ thống để vận hành (System Requirements)
- Hệ điều hành: Linux (Ubuntu 18.04 LTS trở lên) hoặc Windows Server 2016/2019.
- Môi trường thực thi: .NET Core Runtime 3.1 / .NET 5.0 Hosting Bundle.
- Bộ nhớ & Vi xử lý: Tối thiểu 2 vCPU, 4GB RAM, 40GB SSD lưu trữ CSDL và assets.
- Cơ sở dữ liệu: Microsoft SQL Server 2017/2019 hoặc Azure SQL Database.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Cơ chế xác thực tài khoản hiện tại phụ thuộc vào ASP.NET Core Session Management truyền thống, chưa chuyển đổi hoàn toàn sang JSON Web Token (JWT) để phục vụ kiến trúc Microservices.
- Chưa có trình phát video chuyên dụng chống ghi hình màn hình hoặc tải lậu (DRM protection).
Hướng phát triển trong tương lai
- Tích hợp ASP.NET Core Identity & JWT: Nâng cấp hệ thống xác thực sang chuẩn OAuth2 / OpenID Connect, mở rộng API cho ứng dụng Mobile (Flutter / React Native).
- Triển khai Cloud Object Storage: Tích hợp dịch vụ lưu trữ đám mây AWS S3 / Azure Blob Storage để lưu trữ video bài giảng và tài liệu tải về thay cho hệ thống file cục bộ.
- Ứng dụng AI gợi ý lộ trình học: Tích hợp thuật toán đề xuất khóa học dựa trên lịch sử học tập và phản hồi của học viên.
Đối tượng hưởng lợi
- Sinh viên & Học viên: Tiếp cận kho học liệu có cấu trúc, linh hoạt tải tài liệu, xem lại bài giảng mọi lúc mọi nơi, dễ dàng tương tác báo cáo lỗi bài học.
- Lập trình viên & Sinh viên IT: Bản thiết kế là mã nguồn mẫu chuẩn mực về cách phân chia tầng ứng dụng (Clean Architecture/Repository Pattern), áp dụng EF Core Code-First và xử lý ASP.NET Core Areas.
- Doanh nghiệp & Trường học: Nắm giữ một giải pháp E-Learning sẵn sàng triển khai ngay với chi phí bản quyền 0 đồng, tối ưu hóa hạ tầng máy chủ vận hành.
Câu hỏi thường gặp
1. Hệ thống có thể triển khai trên môi trường Linux mà không dùng Windows Server được không?
Hoàn toàn được. Nhờ đặc tính độc lập nền tảng của .NET Core, ứng dụng có thể biên dịch và chạy trực tiếp trên các bản phân phối Linux (Ubuntu, CentOS, Debian) thông qua Kestrel Web Server kết hợp NGINX làm Reverse Proxy.
2. Dữ liệu mật khẩu của người dùng được bảo mật như thế nào trong CSDL?
Mật khẩu người dùng trước khi ghi vào bảng Users hoặc Admin_Models đều được băm bằng thuật toán mã hóa một chiều an toàn (PBKDF2/HMACSHA256 kết hợp Salt ngẫu nhiên), chống lại các cuộc tấn công vét cạn (Brute-force) và đối chiếu bảng cầu vồng (Rainbow Table).
3. Quy trình xử lý lỗi nội dung bài học (Report Workflow) diễn ra như thế nào?
Khi học viên gửi Ticket tại một bài học, hệ thống tạo bản ghi trạng thái Chưa xác nhận. Quản trị viên tại Admin Area duyệt kiểm tra và chuyển thành Đã xác nhận. Sau khi chỉnh sửa video/tài liệu bài học, Admin chọn Đã hoàn thành để đóng ticket và kích hoạt thông báo tự động.
4. Hệ thống chịu tải được bao nhiêu người dùng đồng thời trên một máy chủ tiêu chuẩn?
Với cấu hình máy chủ 4 vCPU / 8GB RAM, hệ thống tối ưu hóa bằng async/await và Connection Pooling có thể xử lý mượt mà từ $800 - 1,200$ người dùng hoạt động đồng thời (CCU) với thời gian phản hồi dưới $100\text{ms}$.
5. Chi phí triển khai và thời gian hoàn vốn (ROI) ước tính cho một trường học quy mô vừa?
Chi phí ban đầu ước tính khoảng 15 - 25 triệu VNĐ (cho hạ tầng Cloud Server 1 năm và tên miền/SSL). So với chi phí mua bản quyền phần mềm đóng gói (thường từ 80 - 150 triệu VNĐ/năm), giải pháp giúp hoàn vốn và tiết kiệm ngân sách ngay từ tháng thứ 3 sau khi đưa vào vận hành.
Kết luận
Đồ án "Xây dựng ứng dụng Website học tập online bằng ASP.Net Core" của tác giả Nguyễn Hoàng Thiên Ân đã hiện thực hóa thành công một nền tảng giáo dục trực tuyến toàn diện, vững chắc về mặt công nghệ và thực tiễn về mặt ứng dụng. Bằng việc kết hợp sức mạnh xử lý đa nền tảng của .NET Core, mô hình phân tầng Repository Pattern và hệ quản trị SQL Server, dự án cung cấp giải pháp chuyển đổi số đào tạo hiệu quả cao, chi phí thấp, mở ra tiền đề thuận lợi cho việc phát triển các hệ thống học tập thông minh trong tương lai.