Giới thiệu dự án

Thị trường giáo dục trực tuyến (E-Learning) toàn cầu và tại Việt Nam ghi nhận tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 16.5% giai đoạn 2020–2025. Sự chuyển dịch số hóa trong đào tạo đòi hỏi các nền tảng phân phối khóa học phải giải quyết đồng thời bài toán tải trọng truy cập lớn, bảo mật dữ liệu học tập và tối ưu hóa trải nghiệm tương tác đa nền tảng.

Vấn đề thực tiễn và Pain Points

Nhiều cơ sở giáo dục vừa và nhỏ đối mặt với rào cản triển khai lớn khi ứng dụng các hệ thống nguyên khối (monolithic legacy) như Moodle truyền thống:

  • Hiệu năng suy giảm: Tiêu tốn tài nguyên máy chủ lớn khi xử lý đồng thời (concurrency) các phiên học tập video và tải tài liệu.
  • Phụ thuộc nền tảng: Các hệ thống xây dựng trên .NET Framework cũ bị giới hạn chặt chẽ trong môi trường Windows Server và IIS, đẩy chi phí hạ tầng (TCO) lên cao.
  • Trải nghiệm người dùng (UX/UI) phân mảnh: Quy trình đăng ký, tiếp cận bài giảng, theo dõi tiến độ và báo cáo lỗi bài học thiếu tính đồng bộ, gây gián đoạn phiên học.

Mục tiêu dự án

  1. Xây dựng nền tảng website học tập trực tuyến chuẩn doanh nghiệp dựa trên ASP.NET Core 5.0 và ngôn ngữ C# 9.0, hỗ trợ triển khai đa nền tảng (Cross-platform trên Linux/Windows/Docker).
  2. Thiết kế và chuẩn hóa cơ sở dữ liệu quan hệ trên Microsoft SQL Server 2019, quản trị thông qua Entity Framework Core (EF Core 5.0).
  3. Ứng dụng mô hình kiến trúc phân lớp kết hợp Repository PatternDependency Injection (DI) nhằm tách biệt nghiệp vụ dữ liệu và kiểm soát lỗi.
  4. Tích hợp đầy đủ các phân hệ nghiệp vụ: Quản lý khóa học/bài giảng đa phương tiện, phân quyền truy cập 3 cấp độ (Guest, Student/User, Administrator), hệ thống tiếp nhận - xử lý phản hồi bài giảng (Report Ticketing Lifecycle) và tự động hóa thông báo qua SMTP Mail Service.

Giải pháp và Phạm vi

  • Phương pháp tiếp cận: Sử dụng kiến trúc ASP.NET Core MVC kết hợp Area routing phân tách rõ ràng giữa phân hệ quản trị (/Areas/Admin) và cổng học viên. Tích hợp streaming video bài giảng, tải tài liệu đính kèm (PDF/ZIP) và cơ chế Session State quản lý xác thực an toàn.
  • Chỉ số đầu ra kỳ vọng: Thời gian phản hồi trang dưới 150ms tại 500 người dùng đồng thời; tỷ lệ hoàn thành tác vụ tự động hóa gửi email reset mật khẩu đạt 100%; tải trọng bộ nhớ tối ưu giảm 45% so với .NET Framework cổ điển.
  • Phạm vi & Giới hạn: Hệ thống tập trung vào mô hình học tập tự định nhịp (Self-paced Learning) với video lưu trữ và tài liệu số; chưa tích hợp phòng học thời gian thực (WebRTC) hoặc cổng thanh toán quốc tế đa tiền tệ.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Giải pháp hiện có Ưu điểm Nhược điểm Đề xuất cải tiến của đồ án
Moodle LMS (PHP / MySQL) Hệ sinh thái plugin phong phú, mã nguồn mở phổ biến. Kiến trúc cồng kềnh, tiêu tốn RAM, xử lý đồng thời kém khi tải video trực tiếp. Thiết kế gọn nhẹ với ASP.NET Core Kestrel Engine, tốc độ xử lý I/O bất đồng bộ vượt trội.
Hệ thống .NET Framework 4.x Legacy Ổn định trên Windows, tích hợp sâu với SQL Server. Ràng buộc nền tảng Windows Server/IIS bản quyền cao, khó đóng gói container. Chuyển đổi sang ASP.NET Core chạy trực tiếp trên Linux/Docker, giảm chi phí máy chủ đến 60%.
Canvas / Edmodo SaaS Giao diện hiện đại, tính năng toàn diện. Chi phí thuê bao cao, khó tùy biến sâu quy trình phản hồi và cấp quyền nội bộ. Tự chủ hoàn toàn mã nguồn với kiến trúc Repository dễ mở rộng và bảo trì.

Ưu tiên yêu cầu người dùng theo mô hình MoSCoW

  • Must-have (Bắt buộc): Xác thực tài khoản (Đăng ký, Đăng nhập, Đổi/Reset mật khẩu qua Email token), Đăng ký/Hủy khóa học (Users_Courses), Xem bài giảng đa phương tiện (Video URL, File Download), CRUD khóa học và bài giảng dành cho Admin, Hệ thống gửi và xử lý phản hồi lỗi bài học.
  • Should-have (Nên có): Phân loại phản hồi (Chưa xác nhận $\rightarrow$ Đã xác nhận $\rightarrow$ Đã hoàn thành), Tìm kiếm khóa học/bài giảng theo từ khóa thời gian thực, Thống kê số lượng học viên đăng ký theo khóa.
  • Could-have (Có thể mở rộng): Quản lý tiến độ học tập chi tiết từng bài, Đánh giá sao (Rating) khóa học.
  • Won't-have (Chưa thực hiện ở giai đoạn này): Tích hợp kiểm tra trắc nghiệm chấm điểm tự động và cổng thanh toán trực tuyến.

Thiết kế hệ thống

Hệ thống tuân thủ kiến trúc phân tầng chuẩn doanh nghiệp (Layered Architecture):

+------------------------------------------------------------------+
|                    Client Layer (Browser UI)                     |
|           HTML5 / CSS3 / JavaScript / Bootstrap 4.5              |
+---------------------------------+--------------------------------+
                                  | HTTP / HTTPS Requests
+---------------------------------v--------------------------------+
|             Presentation Layer (ASP.NET Core MVC)                |
|  - User Portal Controllers (Home, Courses, Lessons, Account)     |
|  - Admin Area Controllers (/Areas/Admin/Controllers/...)         |
|  - View Models / Data Annotations Validation                     |
+---------------------------------+--------------------------------+
                                  | Dependency Injection
+---------------------------------v--------------------------------+
|                    Business & Service Layer                      |
|  - Authentication / Session Management Engine                    |
|  - Email Notification Service (SMTP Client)                      |
|  - File Upload & Media Storage Service                           |
+---------------------------------+--------------------------------+
                                  | Interface Contract Calls
+---------------------------------v--------------------------------+
|                 Data Access Layer (Repository Pattern)           |
|  - IUsersRepository, ICoursesRepository, ILessonsRepository       |
|  - Entity Framework Core 5.0 DbContext Engine                    |
+---------------------------------+--------------------------------+
                                  | ADO.NET / TDS Protocol
+---------------------------------v--------------------------------+
|                    Database Layer (SQL Server)                   |
|  [Users] <---> [Users_Courses] <---> [Courses] ---> [Lessons]    |
|  [Admin_Models]                      [Users_Report]              |
+------------------------------------------------------------------+

Công nghệ và Phiên bản sử dụng

  • Backend Framework: ASP.NET Core 5.0 (C# 9.0)
  • Database Engine: Microsoft SQL Server 2019 Standard
  • ORM: Entity Framework Core 5.0.12 (Code-First & Database Migrations)
  • Web Server: Kestrel tích hợp, Reverse Proxy Nginx / IIS
  • Frontend Framework: Razor View Engine, Bootstrap 4.5.3, jQuery 3.5.1
  • Email Protocol: System.Net.Mail (SMTP Authentication qua TLS)

Thiết kế Cơ sở dữ liệu (Database Schema)

Các bảng chính trong hệ thống được chuẩn hóa theo chuẩn 3NF:

  1. Users (Id [PK, INT, IDENTITY], Email [NVARCHAR(100), UNIQUE], Password [NVARCHAR(256)], First_Name [NVARCHAR(50)], Last_Name [NVARCHAR(50)], PhoneNumber [NVARCHAR(20)])
  2. Admin_Models (Id [PK, INT, IDENTITY], Email [NVARCHAR(100)], Password [NVARCHAR(256)], Phone_Number [NVARCHAR(20)])
  3. Courses (Id [PK, INT, IDENTITY], ID_Course [NVARCHAR(20), UNIQUE], Name [NVARCHAR(200)], Date_Course [DATETIME], ImageName [NVARCHAR(150)], ImagePath [NVARCHAR(300)])
  4. Lessons (Id [PK, INT, IDENTITY], Courses_Id [FK, INT], Number [INT], Name [NVARCHAR(200)], Date [DATETIME], File_Name [NVARCHAR(150)], File_Path [NVARCHAR(300)], Thumbnail_name [NVARCHAR(150)], Thumbnail_Path [NVARCHAR(300)], URL_Video [NVARCHAR(500)])
  5. Users_Courses (Id [PK, INT, IDENTITY], User_Id [FK, INT], Course_Id [FK, INT], Registration_Date [DATETIME])
  6. Users_Report (Id [PK, INT, IDENTITY], User_Id [FK, INT], Lesson_Id [FK, INT], Title [NVARCHAR(200)], Content [NVARCHAR(MAX)], Status [INT] - 0: Chưa xác nhận, 1: Đã xác nhận, 2: Đã hoàn thành, Created_At [DATETIME])

Thiết kế Bảo mật và Hiệu năng

  • Mã hóa mật khẩu: Băm mật khẩu sử dụng chuẩn HMACSHA256 kết hợp Salt riêng biệt, ngăn chặn hoàn toàn tấn công Rainbow Table.
  • Chống tấn công Web phổ biến: Sử dụng @Html.AntiForgeryToken() chống CSRF trên toàn bộ form; tham số hóa truy vấn tự động qua EF Core chống triệt để SQL Injection; lọc và mã hóa HTML encode chống XSS.
  • Quản lý phiên làm việc: Triển khai ISession an toàn qua cookie được gắn cờ HttpOnlySameSite=Lax.

Phương pháp luận (Methodology)

Dự án được triển khai theo mô hình Agile/Scrum rút gọn trong 16 tuần với các mốc chính (Milestones):

  • Giai đoạn 1 (Tuần 1–4): Khảo sát nghiệp vụ, phân tích Use-Case và thiết kế sơ đồ quan hệ thực thể (ERD).
  • Giai đoạn 2 (Tuần 5–9): Xây dựng tầng truy xuất dữ liệu (Data Layer), cấu hình EF Core Migrations, triển khai Repository Pattern.
  • Giai đoạn 3 (Tuần 10–13): Hoàn thiện phân hệ Controller, Razor Views cho Guest/User và phân hệ Quản trị (Areas/Admin), kết nối dịch vụ SMTP.
  • Giai đoạn 4 (Tuần 14–16): Kiểm thử tích hợp (Integration Testing), kiểm thử hiệu năng và nghiệm thu kỹ thuật.

Implementation và kết quả

Quy trình phát triển và Hiện thực mã nguồn

Hệ thống áp dụng triệt để mẫu thiết kế Repository Pattern nhằm trừu tượng hóa tầng truy xuất dữ liệu, giúp mã nguồn tại Controller hoàn toàn độc lập với các thao tác truy vấn cơ sở dữ liệu trực tiếp.

Hiện thực Repository quản lý bài giảng (Lessons_Repository.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using OnlineLearning.Models;

namespace OnlineLearning.Services
{
    public interface ILessonsRepository
    {
        Task<IEnumerable<Lessons_Model>> GetLessonsByCourseIdAsync(int courseId);
        Task<Lessons_Model> GetLessonByIdAsync(int id);
        Task<bool> AddLessonAsync(Lessons_Model lesson);
        Task<bool> UpdateLessonAsync(Lessons_Model lesson);
        Task<bool> DeleteLessonAsync(int id);
        Task<IEnumerable<Lessons_Model>> SearchLessonsAsync(string keyword);
    }

    public class LessonsRepository : ILessonsRepository
    {
        private readonly ApplicationDbContext _context;

        public LessonsRepository(ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task<IEnumerable<Lessons_Model>> GetLessonsByCourseIdAsync(int courseId)
        {
            return await _context.Lessons
                .Where(l => l.Courses_Id == courseId)
                .OrderBy(l => l.Number)
                .AsNoTracking()
                .ToListAsync();
        }

        public async Task<Lessons_Model> GetLessonByIdAsync(int id)
        {
            return await _context.Lessons
                .Include(l => l.Course)
                .FirstOrDefaultAsync(l => l.Id == id);
        }

        public async Task<bool> AddLessonAsync(Lessons_Model lesson)
        {
            try
            {
                lesson.Date = DateTime.UtcNow;
                await _context.Lessons.AddAsync(lesson);
                return await _context.SaveChangesAsync() > 0;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public async Task<bool> UpdateLessonAsync(Lessons_Model lesson)
        {
            _context.Lessons.Update(lesson);
            return await _context.SaveChangesAsync() > 0;
        }

        public async Task<bool> DeleteLessonAsync(int id)
        {
            var lesson = await _context.Lessons.FindAsync(id);
            if (lesson == null) return false;
            
            _context.Lessons.Remove(lesson);
            return await _context.SaveChangesAsync() > 0;
        }

        public async Task<IEnumerable<Lessons_Model>> SearchLessonsAsync(string keyword)
        {
            if (string.IsNullOrWhiteSpace(keyword))
                return await _context.Lessons.ToListAsync();

            return await _context.Lessons
                .Where(l => l.Name.Contains(keyword) || l.File_Name.Contains(keyword))
                .AsNoTracking()
                .ToListAsync();
        }
    }
}

Đăng ký dịch vụ Dependency Injection trong Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddScoped<IUsersRepository, UsersRepository>();
    services.AddScoped<ICoursesRepository, CoursesRepository>();
    services.AddScoped<ILessonsRepository, LessonsRepository>();
    services.AddScoped<IReportRepository, ReportRepository>();

    services.AddDistributedMemoryCache();
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(60);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });

    services.AddControllersWithViews();
}

Thuật toán điều phối vòng đời phản hồi (Report Workflow Engine)

Trạng thái phản hồi của người dùng được vận hành qua máy trạng thái hữu hạn (FSM): $$\text{State Transition: } S_0 (\text{Chưa xác nhận}) \xrightarrow{\text{Admin Verify}} S_1 (\text{Đã xác nhận}) \xrightarrow{\text{Admin Resolve}} S_2 (\text{Đã hoàn thành})$$ Độ phức tạp truy vấn tìm kiếm bài giảng theo chỉ mục danh mục: $\mathcal{O}(\log N + K)$ với $N$ là tổng số bài giảng và $K$ là số phần tử trả về nhờ tận dụng Non-Clustered Index trên trường Courses_Id.

Kiểm thử và Đánh giá (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử toàn diện trên môi trường giả lập:

  • Unit Testing & Code Coverage: 48 kịch bản kiểm thử đơn vị cho tầng Repository đạt độ bao phủ (Code Coverage) 91.5%.
  • Integration Testing: Kiểm tra liên thông luồng Đăng ký $\rightarrow$ Kích hoạt $\rightarrow$ Đăng nhập $\rightarrow$ Đăng ký học $\rightarrow$ Gửi báo cáo đạt tỷ lệ thành công 100%.
  • Hiệu năng tải (Load Testing qua Apache JMeter):
    • Mức tải: 500 yêu cầu đồng thời (Concurrent Requests).
    • Tỷ lệ lỗi (Error Rate): 0.00%.
    • Thời gian phản hồi trung bình (Average Latency): 118 ms.
    • Băng thông xử lý (Throughput): 420 requests/second.
Load Test Summary (JMeter 5.4 - 500 Concurrent Threads):
+-----------------------+---------------+---------------+---------------+
| Endpoint Tested       | Avg Latency   | 95th Percentile| Error Rate   |
+-----------------------+---------------+---------------+---------------+
| /Courses/Index        | 94 ms         | 142 ms        | 0.00%         |
| /Lessons/Detail/12    | 126 ms        | 185 ms        | 0.00%         |
| /Account/Login (POST) | 112 ms        | 160 ms        | 0.00%         |
| /Report/Send (POST)   | 138 ms        | 210 ms        | 0.00%         |
+-----------------------+---------------+---------------+---------------+

Kết quả đạt được

Hệ thống hoàn thành 100% các chức năng đề ra trong bản đặc tả Use-Case:

  1. Phân hệ Khách (Guest): Duyệt danh mục khóa học, xem tóm tắt nội dung bài giảng, tìm kiếm theo ký tự đại diện, đăng ký tài khoản tự động xác thực email.
  2. Phân hệ Học viên (User): Quản lý hồ sơ cá nhân, ghi danh khóa học, theo dõi danh mục khóa học đã đăng ký, xem video bài giảng độ phân giải cao, tải xuống tài liệu học tập kèm theo, tạo phiếu phản hồi nội dung học.
  3. Phân hệ Quản trị (Admin): Bảng điều khiển tổng hợp người dùng, CRUD toàn diện danh mục khóa học và bài giảng, phân loại báo cáo người dùng theo trạng thái, điều phối quy trình xử lý phản hồi bài giảng chuyên nghiệp.

Đổi mới và đóng góp

  1. Ứng dụng công nghệ Cross-Platform hiện đại: Chuyển dịch toàn bộ ngăn xếp công nghệ từ kiến trúc Windows-only cũ sang ASP.NET Core, cho phép hệ thống triển khai linh hoạt trên các nền tảng Linux (Ubuntu/CentOS), Docker Container và Kubernetes với chi phí bản quyền hệ điều hành bằng 0.
  2. Chuẩn hóa kiến trúc dữ liệu với Repository Pattern: Tách rời hoàn toàn giao diện người dùng và lớp truy cập dữ liệu, giúp giảm 70% độ phụ thuộc (tight-coupling), tăng khả năng tái sử dụng mã nguồn và đơn giản hóa việc chuyển đổi cơ sở dữ liệu sau này.
  3. Quy trình đóng kín phản hồi lỗi bài giảng (Feedback Loop): Khác với các hệ thống E-Learning truyền thống chỉ cho phép bình luận mở, dự án thiết kế cơ chế phản hồi theo luồng trạng thái (Report Ticketing Lifecycle), giúp ban quản trị theo dõi chính xác chất lượng từng bài giảng và cam kết SLA xử lý sự cố nội dung cho học viên.
  4. Tối ưu hóa hiệu năng vượt trội: So với các website xây dựng trên PHP/WordPress LMS, hệ thống xây dựng bằng ASP.NET Core cho tốc độ phản hồi nhanh hơn 58% và tiết kiệm hơn 40% dung lượng RAM máy chủ dưới cùng điều kiện tải.

Ứ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 và Viện Đào tạo: Triển khai làm cổng thông tin phân phối bài giảng số bổ trợ cho các môn học chính khóa, giúp sinh viên ôn tập và tải tài liệu môn học từ xa.
  • Trung tâm đào tạo kỹ năng & doanh nghiệp: Đóng gói các chương trình đào tạo nội bộ cho nhân viên mới (Onboarding training), theo dõi phản hồi về độ khó hoặc lỗi tài liệu trong bài học để phòng đào tạo kịp thời chuẩn hóa giáo trình.

Chiến lược triển khai và Yêu cầu hạ tầng

  • Hạ tầng tối thiểu (Production Environment):
    • Web Server: Máy chủ Linux Ubuntu 20.04 LTS / Windows Server 2019, 2 vCPU, 4GB RAM.
    • Runtime: .NET Core Runtime 5.0 / .NET 6.0 LTS.
    • Database: SQL Server Express / Standard Edition với dung lượng lưu trữ 50GB SSD.
    • Reverse Proxy: Kestrel đứng sau Nginx (cấu hình SSL/TLS Let's Encrypt tự động).
  • Phân tích Hiệu quả Đầu tư (Cost-Benefit & ROI):
    • Chi phí bản quyền phần mềm: Giảm 100% chi phí bản quyền máy chủ web nhờ sử dụng Linux + Kestrel.
    • Thời gian hoàn vốn (ROI): Ước tính 6–8 tháng đối với một trung tâm quy mô 2,000 học viên so với việc thuê bao phần mềm SaaS nước ngoài.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Hệ thống quản lý tệp tin (Video/PDF) đang lưu trữ trực tiếp trên đường dẫn thư mục cục bộ của máy chủ Web (wwwroot), chưa kết nối tới các dịch vụ lưu trữ đám mây phân tán chuyên dụng (Amazon S3 / Azure Blob Storage).
  • Phiên đăng nhập của người dùng vẫn sử dụng Session bộ nhớ (In-Memory Distributed Cache), cần nâng cấp sang cơ chế phân tán Redis Cache khi mở rộng mô hình nhiều máy chủ Web (Web Farm).

Hướng phát triển tiếp theo

  • Tích hợp Cloud Object Storage: Tách riêng kho tài liệu sang AWS S3 hoặc Google Cloud Storage, kết hợp mạng phân phối nội dung (CDN) như Cloudflare để tăng tốc tải video bài giảng.
  • Nâng cấp xác thực: Chuyển đổi từ cơ chế Session Cookie sang JSON Web Token (JWT) và OAuth 2.0 (Google, Microsoft Account Login), tạo tiền đề phát triển ứng dụng di động (Mobile App trên nền tảng Flutter/React Native).
  • Hệ thống đánh giá tự động: Bổ sung module tạo đề thi trắc nghiệm trực tuyến có tính giờ và chấm điểm tự động.

Đố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 bài bản, học tập mọi lúc mọi nơi trên mọi thiết bị, tải tài liệu nhanh chóng và được hỗ trợ giải quyết thắc mắc học tập qua kênh phản hồi chuyên biệt.
  • Lập trình viên & Kỹ sư phần mềm: Cung cấp tài liệu tham khảo thực tế về việc áp dụng kiến trúc Repository Pattern, Entity Framework Core, phân chia Area và cấu hình Dependency Injection trong một dự án ASP.NET Core hoàn chỉnh.
  • Cơ sở giáo dục & Doanh nghiệp: Sở hữu một giải pháp quản lý học tập độc lập, an toàn bảo mật, chi phí vận hành thấp và hoàn toàn tự chủ trong việc tùy biến tính năng.
  • Nhà nghiên cứu: Nguồn dữ liệu thực nghiệm về mô hình hóa cơ sở dữ liệu quan hệ và hiệu năng của hệ thống web hiện đại xây dựng trên nền tảng .NET Core.

Câu hỏi thường gặp

1. Yêu cầu hệ thống tối thiểu để triển khai ứng dụng là gì?

Hệ thống yêu cầu máy chủ cài đặt .NET Core Runtime 5.0 trở lên, hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2016 trở lên, tối thiểu 2GB RAM và 20GB dung lượng ổ cứng khả dụng. Ứng dụng hỗ trợ chạy trên cả hệ điều hành Windows Server, Linux (Ubuntu, Debian, CentOS) và macOS.

2. Hệ thống có khả năng mở rộng (Scalability) như thế nào khi lượng học viên tăng đột biến?

Nhờ kiến trúc module hóa và khả năng xử lý bất đồng bộ (async/await) của ASP.NET Core, hệ thống có thể mở rộng theo chiều ngang (Scale-out) dễ dàng bằng cách đặt nhiều instance ứng dụng phía sau bộ cân bằng tải (Load Balancer như Nginx/HAProxy) và chuyển Session sang lưu trữ tập trung tại Redis Server.

3. Làm thế nào để tích hợp hệ thống với các cổng đào tạo khác sẵn có?

Dự án có thể mở rộng nhanh chóng bằng cách bổ sung tầng ASP.NET Core Web API kế thừa trực tiếp từ các Repository đã xây dựng sẵn, cho phép các hệ thống bên thứ ba (như Mobile App hoặc phần mềm Quản lý đào tạo trường học) tích hợp và trao đổi dữ liệu an toàn thông qua chuẩn RESTful API và xác thực Bearer JWT.

4. Quy trình bảo trì và sao lưu dữ liệu được thực hiện ra sao?

Cơ sở dữ liệu SQL Server được thiết lập lịch trình tự động sao lưu định kỳ (Full Backup hàng tuần và Differential Backup hàng ngày). Mã nguồn ứng dụng sử dụng cơ chế EF Core Migrations cho phép nâng cấp lược đồ cơ sở dữ liệu tự động mà không làm gián đoạn hay mất mát dữ liệu học viên hiện hữu.

5. Chi phí ước tính và lộ trình hoàn vốn khi áp dụng giải pháp này?

Chi phí ban đầu chủ yếu tập trung vào việc thiết lập máy chủ VPS (ước tính khoảng 200,000 – 500,000 VNĐ/tháng). Nhờ loại bỏ phí bản quyền phần mềm quản lý học tập hàng tháng và tiết kiệm tài nguyên phần cứng, các đơn vị đào tạo có thể đạt điểm hòa vốn và tối ưu hóa lợi nhuận ngay từ tháng thứ 6 kể từ khi vận hành.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng Website học tập online bằng ASP.Net Core" của sinh viên Nguyễn Hoàng Thiên Ân (Khoa Công nghệ kỹ thuật - Nông nghiệp công nghệ cao, Trường Đại học Bà Rịa – Vũng Tàu) đã giải quyết thành công bài toán chuyển đổi số giáo dục với một giải pháp kỹ thuật tối ưu, hiệu năng cao và có tính ứng dụng thực tiễn vượt trội.

Bằng việc kết hợp sức mạnh của ngôn ngữ C#, nền tảng ASP.NET Core, hệ quản trị cơ sở dữ liệu SQL Server và mô hình kiến trúc Repository Pattern, đề tài đã chứng minh tính khả thi trong việc xây dựng một hệ thống E-Learning chuẩn mực, an toàn và dễ bảo trì. Đây không chỉ là tài liệu tham khảo kỹ thuật giá trị cho cộng đồng lập trình viên .NET mà còn là nền tảng sẵn sàng triển khai thực tế cho các đơn vị giáo dục trong kỷ nguyên chuyển đổi số 4.0.