Giới thiệu dự án

Thương mại điện tử (E-Commerce) đã trở thành trụ cột tăng trưởng trọng yếu của nền kinh tế số toàn cầu. Theo báo cáo khảo sát hành vi tiêu dùng của PwC, có tới 41% người tiêu dùng toàn cầu và đặc biệt là 69% người tiêu dùng tại Việt Nam ưu tiên mua sắm trực tuyến thông qua các thiết bị điện tử thay vì phương thức truyền thống. Thống kê thương mại điện tử năm 2022 tại Việt Nam ghi nhận hơn 51 triệu người tham gia mua sắm trực tuyến với tổng quy mô thị trường đạt 12,42 tỷ USD, trong đó 73% người dùng thường xuyên giao dịch trên các nền tảng số. Nhu cầu phân phối và kinh doanh các sản phẩm linh kiện, thiết bị điện tử qua mạng đòi hỏi các giải pháp phần mềm phải đảm bảo tốc độ phản hồi nhanh, tính toàn vẹn dữ liệu và trải nghiệm người dùng liền mạch.

Đề tài "Xây dựng website bán hàng điện tử qua mạng" được thực hiện bởi sinh viên Tạ Quang Huy dưới sự hướng dẫn của TS. Nguyễn Thị Mỹ Bình tại Trường Đại học Công nghiệp Hà Nội (ngành Khoa học Máy tính). Đề tài giải quyết trực diện các hạn chế cố hữu của các hệ thống nguyên khối (monolithic legacy systems) như: độ trễ tải trang cao, giao diện thiếu tính linh động, sự phụ thuộc chặt chẽ giữa tầng hiển thị và tầng dữ liệu, cũng như nguy cơ mất an toàn thông tin khi xử lý giao dịch trực tuyến.

+-------------------------------------------------------------------------+
|                  MỤC TIÊU CỐT LÕI CỦA DỰ ÁN                             |
+-------------------------------------------------------------------------+
| 1. Xây dựng kiến trúc tách rời Client-Server (SPA & RESTful API)        |
| 2. Tối ưu hóa hiệu năng với ASP.NET Core 6 & Angular TypeScript         |
| 3. Chuẩn hóa cơ sở dữ liệu quan hệ MySQL tích hợp Auditing & Soft-Delete|
| 4. Triển khai đầy đủ nghiệp vụ: Danh mục, Giỏ hàng, Đánh giá, Đơn hàng  |
| 5. Đảm bảo an toàn giao vận qua giao thức HTTPS / SSL / TLS             |
+-------------------------------------------------------------------------+

Dự án áp dụng phương pháp phát triển phân tách độc lập giữa Frontend (Single Page Application - SPA trên nền tảng Angular Framework) và Backend (RESTful Web API trên nền tảng ASP.NET Core 6), kết nối với hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) MySQL. Giải pháp này giảm tải đáng kể cho máy chủ, tối ưu băng thông đường truyền và cho phép hệ thống dễ dàng mở rộng sang các nền tảng ứng dụng di động trong tương lai. Phạm vi đề tài tập trung vào việc quản lý sản phẩm điện tử, giỏ hàng, quy trình đặt hàng, phản hồi - đánh giá từ khách hàng và bảng điều khiển quản trị (Admin Dashboard).


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

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

Khảo sát các giải pháp website bán hàng hiện nay trên thị trường cho thấy nhiều doanh nghiệp vừa và nhỏ (SMEs) vẫn đang phụ thuộc vào các nền tảng mã nguồn mở nguyên khối hoặc hệ thống kế thừa (legacy systems) với nhiều nhược điểm về hiệu năng và bảo mật.

Tiêu chí đánh giá Hệ thống WordPress / WooCommerce Hệ thống ASP.NET MVC 5 (Legacy) Hệ thống Đề xuất (Angular + ASP.NET Core 6)
Kiến trúc Monolithic PHP, render phía server Monolithic .NET Framework Tách rời SPA (Client) & REST API (Backend)
Tốc độ phản hồi (Latency) Trung bình 450ms - 800ms Trung bình 300ms - 500ms Tối ưu < 150ms (Nhờ Kestrel & SPA routing)
Tải tài nguyên Reload toàn bộ trang mỗi request Reload từng phần hoặc toàn trang Chỉ tải dữ liệu JSON, render tại client
Tiêu thụ RAM kết nối HTTPS Trung bình Khá cao trên Windows Server Giảm ~40% bộ nhớ nhờ .NET 6 Runtime
Khả năng mở rộng API Hạn chế, cấu trúc plugin phức tạp Phụ thuộc IIS, khó scale cross-platform Hỗ trợ Containerization, chạy tốt trên Linux/Docker

Dựa trên kỹ thuật phân loại yêu cầu MoSCoW, hệ thống xác định các chức năng trọng yếu:

  • Must-have (Bắt buộc): Đăng ký/đăng nhập, xem danh mục phân cấp, tìm kiếm sản phẩm theo từ khóa, giỏ hàng, đặt hàng thanh toán, quản lý CRUD (Create, Read, Update, Delete) sản phẩm và người dùng cho Admin.
  • Should-have (Cần có): Đánh giá sản phẩm (Rating), bình luận phản hồi (Comment), cơ chế xóa mềm (Soft Delete) dữ liệu.
  • Could-have (Có thể mở rộng): Tích hợp cổng thanh toán trực tuyến (VNPay/Momo), gợi ý sản phẩm thông minh.
  • Won't-have (Chưa thực hiện ở giai đoạn này): Hệ sinh thái đa sàn đấu giá C2C phức tạp.
+--------------------------------------------------------------------------+
|                     GAP ANALYSIS & CƠ HỘI NÂNG CẤP                       |
+--------------------------------------------------------------------------+
|  [Hạn chế hiện trạng]                 [Giải pháp trong đồ án]            |
|  - Trễ tải trang do SSR truyền thống  --> Chuyển đổi sang Angular SPA    |
|  - Ràng buộc hạ tầng Windows Server   --> ASP.NET Core 6 Cross-Platform  |
|  - Dữ liệu bị xóa vĩnh viễn (Hard)   --> Chuẩn hóa cơ chế Soft Delete    |
+--------------------------------------------------------------------------+

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình phân tầng Client-Server hiện đại, kết hợp chặt chẽ giữa các nguyên lý lập trình hướng đối tượng (OOP: Trừu tượng hóa, Đóng gói, Kế thừa, Đa hình) và phong cách kiến trúc RESTful.

+--------------------------------------------------------------------------+
|                       KIẾN TRÚC HỆ THỐNG PHÂN TẦNG                       |
+--------------------------------------------------------------------------+
| [CLIENT TIER]                                                            |
|  Angular 14+ SPA (TypeScript, HTML5, CSS3)                               |
|  +-- Components | NgModules | Services | HttpClient | Reactive Forms     |
+------------------------------------+-------------------------------------+
                                     | (HTTPS / JSON Requests)
                                     v
+--------------------------------------------------------------------------+
| [BACKEND API TIER]                                                       |
|  ASP.NET Core 6 Web API (C# .NET Runtime)                                |
|  +-- Controllers (SanPham, User, Order, Category)                        |
|  +-- Middleware Pipeline (Authentication, CORS, Error Handling)          |
|  +-- Dependency Injection (DI) Container                                 |
+------------------------------------+-------------------------------------+
                                     | (SQL Queries / Connection Pool)
                                     v
+--------------------------------------------------------------------------+
| [DATABASE TIER]                                                          |
|  MySQL 8.0 RDBMS                                                         |
|  +-- Tables: USER, CATEGORY, PRODUCT, ORDER, ORDERDETAIL, COMMENT...     |
+--------------------------------------------------------------------------+

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

  • Frontend: Angular 14+, Angular CLI, TypeScript 4.8+, Bootstrap/CSS3.
  • Backend: ASP.NET Core 6.0 Web API, C# 10, Kestrel Server.
  • Hệ quản trị CSDL: MySQL Server 8.0, tương thích công cụ MySQL Workbench và phpMyAdmin.
  • Môi trường phát triển: Visual Studio 2022 Enterprise, Visual Studio Code, Node.js 18 LTS, Git-SCM.

Thiết kế cơ sở dữ liệu quan hệ (Relational Database Schema)

Hệ thống chuẩn hóa các thực thể với khóa chính (Id), khóa ngoại thiết lập toàn vẹn tham chiếu, đồng thời áp dụng trường dữ liệu giám sát hệ thống (Auditing) và xóa mềm (Soft-Delete) trên toàn bộ các bảng:

-- Cấu trúc bảng Sản phẩm (PRODUCT)
CREATE TABLE `PRODUCT` (
  `Id` INT AUTO_INCREMENT PRIMARY KEY,
  `Title` VARCHAR(255) NOT NULL,
  `Image` VARCHAR(500) NOT NULL,
  `Images` TEXT NULL,
  `Description` LONGTEXT NULL,
  `Price` DECIMAL(18, 2) NOT NULL DEFAULT 0.00,
  `Quantity` INT NOT NULL DEFAULT 0,
  `ShortDesc` VARCHAR(500) NULL,
  `CategoryId` INT NOT NULL,
  `ModifiedBy` VARCHAR(100) NULL,
  `ModifiedDate` DATETIME NULL,
  `CreatedBy` VARCHAR(100) NULL,
  `CreatedDate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `IsDeleted` TINYINT(1) NOT NULL DEFAULT 0,
  CONSTRAINT `FK_Product_Category` FOREIGN KEY (`CategoryId`) REFERENCES `CATEGORY`(`Id`)
);

Các thực thể liên kết chặt chẽ bao gồm: USER (1-n) ORDER, ORDER (1-n) ORDERDETAIL, PRODUCT (1-n) ORDERDETAIL, PRODUCT (1-n) COMMENT, PRODUCT (1-n) RATING, và USER (1-n) ADDRESS.

Thiết kế giao diện lập trình ứng dụng (RESTful API Endpoints)

Method Endpoint Chức năng nghiệp vụ Tham số / Body
GET /api/product Lấy danh sách sản phẩm phân trang pageIndex, pageSize
GET /api/product/{id} Lấy chi tiết sản phẩm theo ID id (int)
GET /api/product/category/{catId} Lọc sản phẩm theo danh mục catId (int)
POST /api/user/login Xác thực đăng nhập người dùng { username, password }
POST /api/order/create Tạo đơn hàng mới và chi tiết đơn { userId, items, addressId }
POST /api/comment/create Gửi bình luận và đánh giá { productId, rating, content }

Tiêu chuẩn an toàn và bảo mật

  • Sử dụng giao thức HTTPS kết hợp mã hóa Transport Layer Security (TLS/SSL) bảo vệ tính toàn vẹn dữ liệu truyền giữa Client và Web Server.
  • Áp dụng cơ chế phân quyền RBAC (Role-Based Access Control) phân định quyền giữa Administrator và Customer.
  • Triển khai chính sách Cross-Origin Resource Sharing (CORS) giới hạn nguồn truy cập API an toàn.

Methodology

Dự án được triển khai theo mô hình phát triển phần mềm lặp linh hoạt (Agile Scrum) rút gọn, chia làm 4 giai đoạn chính (Milestones):

+-------------------------------------------------------------------------+
|                  LỘ TRÌNH TRIỂN KHAI PHẦN MỀM (TIMELINE)                |
+-------------------------------------------------------------------------+
| Tuần 1-3 : Khảo sát, phân tích yêu cầu, thiết kế biểu đồ Use Case & ERD |
| Tuần 4-7 : Xây dựng CSDL MySQL, phát triển REST API với ASP.NET Core 6  |
| Tuần 8-11: Lập trình Frontend Angular, tích hợp Components & Services   |
| Tuần 12-14: Kiểm thử chức năng, tối ưu hiệu năng, hoàn thiện báo cáo    |
+-------------------------------------------------------------------------+

Quản trị rủi ro tập trung vào việc xử lý lỗi bất đồng bộ khi gọi API bằng RxJS Observables, ngăn chặn SQL Injection thông qua Parameterized Queries/ORM, và kiểm soát xung đột dữ liệu bằng transaction cơ sở dữ liệu.


Implementation và kết quả

Development process

Quá trình phát triển tập trung vào việc chuẩn hóa mã nguồn trên cả hai tầng ứng dụng theo đúng nguyên lý SOLID và kiến trúc hướng thành phần (Component-Based Architecture).

Xử lý dữ liệu tại tầng Frontend (Angular Service)

Angular Service đóng gói toàn bộ logic tương tác HTTP, sử dụng HttpClient để kết nối tới Backend API và trả về kiểu dữ liệu generic định kiểu tĩnh qua TypeScript:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Product } from '../models/product.model';

@Injectable({
  providedIn: 'root'
})
export class ProductService {
  private readonly apiUrl = 'https://localhost:7001/api/sanpham';

  constructor(private http: HttpClient) {}

  getProducts(): Observable<Product[]> {
    return this.http.get<Product[]>(this.apiUrl);
  }

  getProductById(id: number): Observable<Product> {
    return this.http.get<Product>(`${this.apiUrl}/${id}`);
  }

  getProductsByCategory(categoryId: number): Observable<Product[]> {
    return this.http.get<Product[]>(`${this.apiUrl}/category/${categoryId}`);
  }
}

Xử lý dữ liệu tại tầng Backend (ASP.NET Core Controller)

Controller tiếp nhận HTTP Request, xử lý logic nghiệp vụ và trả về mã trạng thái HTTP tiêu chuẩn (200 OK, 400 BadRequest, 404 NotFound, 500 InternalServerError):

[ApiController]
[Route("api/[controller]")]
public class SanPhamController : ControllerBase
{
    private readonly IProductRepository _productRepo;

    public SanPhamController(IProductRepository productRepo)
    {
        _productRepo = productRepo;
    }

    [HttpGet("category/{categoryId:int}")]
    public async Task<IActionResult> GetByCategory(int categoryId)
    {
        var products = await _productRepo.GetProductsByCategoryIdAsync(categoryId);
        if (products == null || !products.Any())
        {
            return Ok(new { message = "Danh sách trống!", data = Array.Empty<object>() });
        }
        return Ok(products);
    }
}

Testing và validation

Quá trình kiểm thử được thực hiện qua nhiều tầng: Kiểm thử đơn vị (Unit Test), Kiểm thử tích hợp API (Integration Test qua Postman/Swagger), và Kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT).

+--------------------------------------------------------------------------+
|                     KẾT QUẢ KIỂM THỬ HỆ THỐNG (75 KỊCH BẢN)             |
+--------------------------------------------------------------------------+
| [========== PASS: 74 Kịch bản (98.67%) ==========] [FAIL/FIXED: 1 (1.33%)]|
+--------------------------------------------------------------------------+
Nhóm chức năng kiểm thử Số lượng Test Case Số Case Đạt (Pass) Tỷ lệ thành công Thời gian phản hồi trung bình
Xác thực (Auth/User) 15 15 100% 95ms
Danh mục & Sản phẩm 20 20 100% 110ms
Tìm kiếm & Bộ lọc 12 12 100% 125ms
Giỏ hàng & Đặt hàng 16 15 93.75% (Đã fix) 140ms
Đánh giá & Bình luận 12 12 100% 105ms

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

Hệ thống đã hoàn thiện đầy đủ 100% các chức năng cốt lõi theo đúng đề cương nghiên cứu:

  • Xây dựng thành công giao diện SPA mượt mà, chuyển trang không cần tải lại toàn bộ tài nguyên.
  • Đáp ứng thời gian phản hồi API dưới 150ms dưới điều kiện tải thử nghiệm thông thường.
  • Cơ chế quản trị phân quyền rõ ràng: Khách hàng (duyệt sản phẩm, đặt hàng, đánh giá) và Admin/Chủ doanh nghiệp (CRUD sản phẩm, thể loại, theo dõi đơn hàng, quản lý người dùng).
  • Khảo sát người dùng thử nghiệm đạt điểm mức độ hài lòng CSAT (Customer Satisfaction Score) đạt 92/100.

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

  1. Ứng dụng triệt để kiến trúc phân tách hiện đại: Thay thế hoàn toàn cơ chế Server-Side Rendering (SSR) thế hệ cũ bằng kiến trúc SPA Angular kết hợp REST API ASP.NET Core 6, giúp nâng cao hiệu suất xử lý của server và tăng tính tương tác của client.
  2. Khai thác tối đa cải tiến hiệu năng của .NET 6: Tận dụng nhân runtime mới giúp giảm ~40% mức tiêu thụ bộ nhớ trong các kết nối bảo mật HTTPS, tăng tốc độ tuần hoàn dữ liệu Protobuf/JSON lên ~20%, và nâng thông lượng xử lý middleware lên ~5%.
  3. Chuẩn hóa kiến trúc dữ liệu mở rộng (Enterprise Auditing): Tất cả các thực thể quan trọng đều được tích hợp cơ chế xóa mềm IsDeleted cùng các trường truy vết lịch sử (CreatedBy, CreatedDate, ModifiedBy, ModifiedDate), đảm bảo an toàn dữ liệu và tuân thủ chuẩn kiểm toán phần mềm doanh nghiệp.
+-------------------------------------------------------------------------+
|                  SO SÁNH MỨC ĐỘ CẢI THIỆN HIỆU NĂNG                     |
+-------------------------------------------------------------------------+
| Tiêu thụ RAM khi kích hoạt SSL/TLS : Giảm 40% so với .NET Core cũ       |
| Tốc độ Serialization JSON/Protobuf : Nhanh hơn 20%                      |
| Thời gian phản hồi tổng thể (CMS)  : Nhanh hơn gấp 3 lần                |
+-------------------------------------------------------------------------+

Ứng dụng thực tế và triển khai

Khả năng ứng dụng thực tế

Hệ thống phù hợp triển khai trực tiếp cho các cửa hàng kinh doanh linh kiện máy tính, thiết bị điện tử gia dụng hoặc các doanh nghiệp phân phối thiết bị công nghệ quy mô vừa và nhỏ muốn xây dựng kênh bán lẻ trực tuyến độc lập.

+-------------------------------------------------------------------------+
|                     QUY TRÌNH TRIỂN KHAI HỆ THỐNG                       |
+-------------------------------------------------------------------------+
| [Bước 1] Cài đặt môi trường runtime: .NET 6 SDK/Runtime & Node.js 18    |
| [Bước 2] Khởi tạo Database MySQL 8.0, chạy Script tạo bảng & Index      |
| [Bước 3] Build Backend: `dotnet publish -c Release -o ./publish_api`    |
| [Bước 4] Build Frontend: `ng build --configuration production`           |
| [Bước 5] Cấu hình Nginx Web Server Reverse Proxy & SSL Certificate      |
+-------------------------------------------------------------------------+

Phân tích hiệu quả đầu tư (Cost-Benefit Analysis)

Hạng mục chi phí / Lợi ích Giải pháp thuê nền tảng SaaS bên ngoài Giải pháp tự chủ nguồn mở (Đề tài)
Chi phí bản quyền phần mềm 500.000 - 2.000.000 VNĐ/tháng 0 VNĐ (Mã nguồn mở .NET Core & MySQL)
Chi phí máy chủ (VPS Cloud) Đã bao gồm trong gói (bị giới hạn) ~150.000 - 300.000 VNĐ/tháng (Linux VPS)
Khả năng tùy biến tính năng Bị giới hạn bởi nhà cung cấp Toàn quyền kiểm soát 100% mã nguồn
Thời gian hoàn vốn (ROI) Chi phí tăng đều theo năm Ước tính đạt điểm hòa vốn sau 6 - 8 tháng

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

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

  • Quy trình thanh toán hiện tại đang dừng ở mức xác nhận đơn hàng và tạo thủ tục giao dịch, chưa tích hợp trực tiếp Webhook của các cổng thanh toán trung gian như VNPay, MoMo, ZaloPay.
  • Hệ thống tìm kiếm đang sử dụng câu lệnh truy vấn SQL truyền thống (LIKE %keyword%), chưa tích hợp công cụ tìm kiếm toàn văn chuyên dụng (Full-Text Search Engine như Elasticsearch).

Hướng phát triển trong tương lai

  • Tích hợp cổng thanh toán trực tuyến: Kết nối API thanh toán bảo mật với mã hóa chữ ký số HMAC-SHA512.
  • Triển khai bộ nhớ đệm phân tán (Distributed Caching): Áp dụng Redis Caching cho các dữ liệu danh mục và sản phẩm nổi bật nhằm giảm tải 70% truy vấn trực tiếp vào CSDL MySQL.
  • Ứng dụng AI/Machine Learning: Xây dựng hệ thống gợi ý sản phẩm (Recommendation System) dựa trên lịch sử xem hàng và hành vi mua sắm của người dùng.

Đối tượng hưởng lợi

  • Sinh viên & Học viên ngành CNTT: Tài liệu tham khảo hoàn chỉnh về quy trình phân tích thiết kế hệ thống theo chuẩn UML, sơ đồ luồng dữ liệu DFD và kỹ thuật tích hợp Angular SPA với Web API .NET 6.
  • Lập trình viên (Developers): Nắm bắt mô hình kiến trúc phân tầng sạch (Clean Architecture), cách tổ chức Dependency Injection và kỹ thuật đồng bộ dữ liệu giữa TypeScript và C#.
  • Doanh nghiệp bán lẻ (SMEs): Sở hữu giải pháp website bán hàng độc lập, chi phí vận hành thấp, dễ dàng bảo trì và mở rộng quy mô.
  • Nhà nghiên cứu ứng dụng: Nguồn thực nghiệm thực tế về việc tối ưu hóa hiệu năng ứng dụng web thương mại điện tử trên hạ tầng đa nền tảng.

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

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

Máy chủ cần tối thiểu 1 vCPU, 2GB RAM, ổ cứng SSD 20GB, cài đặt hệ điều hành Linux (Ubuntu 20.04/22.04 LTS) hoặc Windows Server, môi trường .NET 6 Runtime, Node.js 18+, và MySQL Server 8.0.

2. Hệ thống có khả năng mở rộng (Scalability) khi lượng truy cập tăng đột biến không?

Nhờ kiến trúc Web API phi trạng thái (Stateless), hệ thống có thể dễ dàng scale ngang (Horizontal Scaling) bằng cách đặt nhiều instance ASP.NET Core phía sau một Load Balancer (Nginx/HAProxy), kết hợp cấu hình cụm CSDL MySQL Master-Slave (Read Replicas).

3. Làm thế nào để tích hợp hệ thống với các phần mềm quản lý kho (ERP/CRM) có sẵn?

Tầng Backend được thiết kế theo chuẩn RESTful API với định dạng trao đổi dữ liệu chuẩn JSON, cho phép các hệ thống bên thứ ba dễ dàng kết nối thông qua các HTTP Request có xác thực Token an toàn.

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

Cơ sở dữ liệu MySQL hỗ trợ cơ chế tự động Backup định kỳ thông qua công cụ mysqldump kết hợp Cronjob trên Linux, đảm bảo an toàn dữ liệu và khả năng phục hồi thảm họa (Disaster Recovery) nhanh chóng.

5. Dự án giúp tiết kiệm chi phí vận hành cho doanh nghiệp như thế nào?

Việc sử dụng các công nghệ mã nguồn mở không tốn phí bản quyền (MySQL, ASP.NET Core trên Linux, Angular) giúp giảm hơn 60% chi phí bản quyền và hạ tầng so với các giải pháp phần mềm độc quyền truyền thống.


Kết luận

Đồ án tốt nghiệp "Xây dựng website bán hàng điện tử qua mạng" đã chứng minh tính đúng đắn và hiệu quả cao của việc kết hợp hai công nghệ hàng đầu hiện nay là AngularASP.NET Core 6. Đề tài không chỉ hoàn thành xuất sắc các mục tiêu nghiên cứu lý thuyết mà còn tạo ra một sản phẩm phần mềm có tính ứng dụng thực tiễn cao, đáp ứng đầy đủ các tiêu chuẩn kỹ thuật về hiệu năng, bảo mật và trải nghiệm người dùng trong kỷ nguyên số. Đây là nền tảng vững chắc để tiếp tục phát triển thành hệ thống thương mại điện tử đa kênh quy mô lớn phục vụ doanh nghiệp trong thực tế.