Giới thiệu dự án

Thương mại điện tử tại Việt Nam đang tăng trưởng với tốc độ ấn tượng, đạt quy mô thị trường hơn 16,4 tỷ USD vào năm 2022 và dự kiến vượt 39 tỷ USD vào năm 2025 (theo báo cáo của Google & Temasek). Trong bối cảnh đó, hàng nghìn cửa hàng thời trang vừa và nhỏ vẫn đang vận hành bằng phương thức thủ công — ghi chép đơn hàng trên giấy, quản lý tồn kho bằng bảng tính Excel, và thiếu kênh bán hàng trực tuyến chuyên nghiệp.

Vấn đề cốt lõi: Cửa hàng quần áo SW (số 23 Nguyễn Thái Học, Đan Phượng, Hà Nội) hoạt động theo giờ cố định từ 8h–22h, phục vụ khách hàng hoàn toàn offline. Điều này dẫn đến ba pain point chính: (1) giới hạn địa lý trong tiếp cận khách hàng, (2) không có hệ thống theo dõi đơn hàng và tồn kho theo thời gian thực, (3) thiếu kênh phản hồi và tương tác với khách hàng sau mua.

Mục tiêu dự án:

  1. Xây dựng website bán hàng trực tuyến đầy đủ chức năng cho cửa hàng quần áo SW (SWShop)
  2. Triển khai hệ thống quản trị (admin panel) cho phép quản lý sản phẩm, đơn hàng, tài khoản và doanh thu
  3. Tích hợp hai phương thức thanh toán: VNPay và COD (Cash on Delivery)
  4. Áp dụng phân quyền ba cấp: Khách hàng – Nhân viên – Quản trị viên

Công nghệ lựa chọn: ASP.NET Core MVC (phiên bản .NET 6.0), Microsoft SQL Server 2014+, Entity Framework Core 6.0, Visual Studio 2022, Rational Rose cho mô hình hóa UML.

Kết quả kỳ vọng: Hệ thống web hoàn chỉnh với thời gian phản hồi dưới 2 giây cho các trang sản phẩm, hỗ trợ đồng thời tối thiểu 50 người dùng, và giảm 70% thời gian xử lý đơn hàng thủ công.


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

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

So sánh các giải pháp hiện có:

Tiêu chí Shopee/Lazada WordPress + WooCommerce Giải pháp tự xây (dự án này)
Chi phí vận hành Phí hoa hồng 2–5% ~2–5 triệu/tháng hosting Chi phí một lần, duy trì thấp
Kiểm soát dữ liệu Thấp (bên thứ ba) Trung bình Cao hoàn toàn
Tùy chỉnh nghiệp vụ Không Hạn chế (plugin) Linh hoạt theo yêu cầu
Tích hợp nội bộ Không hỗ trợ Khó khăn Tích hợp trực tiếp
Phù hợp quy mô SMB Tốt Tốt Tốt cho cửa hàng đặc thù

Phân tích yêu cầu theo MoSCoW:

  • Must Have: Đăng ký/đăng nhập, xem sản phẩm, tìm kiếm, giỏ hàng, đặt hàng, quản lý danh mục/sản phẩm/đơn hàng, phân quyền ba cấp
  • Should Have: Thống kê doanh thu theo tháng, wishlist, quản lý feedback
  • Could Have: Tích hợp VNPay, khuyến mại/coupon
  • Won't Have (trong phạm vi này): Ứng dụng mobile native, AI gợi ý sản phẩm

Ràng buộc kỹ thuật: Phần cứng tối thiểu CPU 1GHz (32/64-bit), RAM 4GB, ổ cứng 20GB; phần mềm Windows 7+, SQL Server 2014+; kết nối mạng LAN ổn định.

Thiết kế hệ thống

Kiến trúc MVC (Model-View-Controller):

SWShop Solution

Technology Stack:

  • Backend: ASP.NET Core MVC 6.0 (C#), Entity Framework Core 6.0
  • Database: Microsoft SQL Server 2014 (T-SQL)
  • ORM: Entity Framework Core với Code-First approach
  • IDE: Microsoft Visual Studio 2022
  • Modeling: Rational Rose (UML 2.0 – Use Case, Sequence, Class Diagrams)
  • Frontend: Razor Pages, Bootstrap 5, HTML5/CSS3, JavaScript
  • Payment: VNPay Gateway SDK

Thiết kế cơ sở dữ liệu — các bảng chính:

Bảng Mô tả Khóa chính Quan hệ
AspNetUsers Tài khoản người dùng (ASP.NET Identity) Id (nvarchar 450) 1-N với Orders, Likes
AspNetRoles Phân quyền hệ thống Id (nvarchar 450) N-N với Users
Categories Danh mục sản phẩm Id (int, PK) 1-N với Products
Products Sản phẩm Id (int, PK) N-1 với Categories
OrderHeaders Đơn hàng chính Id (int, PK) 1-N với OrderDetails
OrderDetails Chi tiết đơn hàng Id (int, PK) N-1 với Products
Likes Wishlist sản phẩm Id (int, PK) N-1 với Users & Products
Rates Đánh giá sản phẩm Id (int, PK) N-1 với Users & Products

Cấu hình DbContext với EF Core:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<OrderHeader> OrderHeaders { get; set; }
    public DbSet<OrderDetail> OrderDetails { get; set; }
    public DbSet<Like> Likes { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Fluent API configurations...
    }
}

Bảo mật hệ thống:

  • ASP.NET Identity với mã hóa mật khẩu bcrypt
  • Role-based Authorization: [Authorize(Roles = "Admin,Employee")]
  • HTTPS mặc định với HTTP Strict Transport Security (HSTS)
  • Anti-CSRF token trên mọi form POST

Methodology

  • Phương pháp phát triển: Waterfall (phù hợp với đồ án tốt nghiệp có phạm vi xác định)
  • Công cụ mô hình hóa: Rational Rose cho UML — vẽ 20+ biểu đồ Use Case, Sequence, Class
  • Timeline: Khảo sát (2 tuần) → Phân tích & Thiết kế (3 tuần) → Lập trình (6 tuần) → Kiểm thử (2 tuần) → Hoàn thiện báo cáo (1 tuần)

Implementation và kết quả

Development process

Luồng xử lý đặt hàng — thuật toán cốt lõi:

[HttpPost]
[Authorize]
public IActionResult PlaceOrder(OrderHeader order)
{
    var cartItems = _unitOfWork.ShoppingCart
        .GetAll(u => u.ApplicationUserId == userId, 
                includeProperties: "Product");

    order.OrderDate = DateTime.Now;
    order.OrderStatus = SD.StatusPending;
    order.PaymentStatus = SD.PaymentStatusPending;

    foreach (var item in cartItems)
    {
        OrderDetail detail = new()
        {
            ProductId = item.ProductId,
            Count = item.Count,
            Price = item.Product.Price
        };
        order.OrderTotal += detail.Price * detail.Count;
        _unitOfWork.OrderDetail.Add(detail);
    }
    _unitOfWork.OrderHeader.Add(order);
    _unitOfWork.Save();
    // Redirect to payment gateway...
}

Tìm kiếm sản phẩm — LINQ to Entities:

public IActionResult Search(string keyword)
{
    var products = _unitOfWork.Product
        .GetAll(p => p.Title.Contains(keyword) || 
                     p.Description.Contains(keyword),
                includeProperties: "Category")
        .ToList();
    return View(products);
}

Phân quyền ba cấp với ASP.NET Identity:

  • Khách hàng (Customer): Xem sản phẩm, tìm kiếm, giỏ hàng, đặt hàng, feedback
  • Nhân viên (Employee): Tất cả quyền Customer + quản lý đơn hàng, xem thống kê
  • Quản trị viên (Admin): Tất cả quyền Employee + quản lý danh mục, sản phẩm, tài khoản, thống kê toàn diện

Testing và validation

Các kịch bản kiểm thử chính:

Use Case Luồng kiểm thử Kết quả
Đăng ký tài khoản Email/SĐT hợp lệ, trùng lặp, thiếu trường Pass (3/3 scenarios)
Đăng nhập Đúng thông tin, sai mật khẩu, tài khoản bị khóa Pass (3/3 scenarios)
Thêm vào giỏ hàng Sản phẩm hợp lệ, tồn kho = 0 Pass (2/2 scenarios)
Đặt hàng (COD) Đủ thông tin giao hàng, thiếu địa chỉ Pass (2/2 scenarios)
Quản lý sản phẩm CRUD đầy đủ + validation Pass (4/4 operations)
Tìm kiếm Từ khóa hợp lệ, không tồn tại, chuỗi rỗng Pass (3/3 scenarios)

Yêu cầu phi chức năng đạt được:

  • Giao diện responsive, tương thích Chrome, Firefox, Edge
  • Tốc độ tải trang chủ: ~1.2 giây (mạng LAN nội bộ)
  • Hệ thống ổn định trong các phiên kiểm thử kéo dài 30 phút liên tục

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

  • 14/14 use case được triển khai đầy đủ theo đặc tả
  • 2 giao diện riêng biệt: Customer-facing storefront và Admin/Employee dashboard
  • 20+ biểu đồ UML được xây dựng bằng Rational Rose (Use Case, Sequence, Class Diagram)
  • Tích hợp thành công VNPay và thanh toán COD
  • Báo cáo thống kê doanh thu theo tháng cho quản trị viên

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

1. Kiến trúc Repository Pattern + Unit of Work:

Thay vì truy cập DbContext trực tiếp trong Controller (anti-pattern phổ biến trong các đồ án sinh viên), dự án áp dụng Repository Pattern kết hợp Unit of Work, giúp tách biệt business logic khỏi data access layer:

public interface IUnitOfWork
{
    IProductRepository Product { get; }
    ICategoryRepository Category { get; }
    IOrderHeaderRepository OrderHeader { get; }
    void Save();
}

Cách tiếp cận này tăng khả năng kiểm thử (testability) và bảo trì so với mẫu phổ biến tại các đồ án tương đương sử dụng ADO.NET thuần túy.

2. So sánh với các giải pháp tương đương:

Khía cạnh Giải pháp ADO.NET thuần WordPress/WooCommerce Dự án này (EF Core MVC)
Thời gian phát triển CRUD Cao (viết SQL thủ công) Thấp (plugin có sẵn) Trung bình (code-first migration)
Khả năng tùy chỉnh Cao Thấp Cao
Bảo trì dài hạn Khó Phụ thuộc plugin Dễ (ORM + MVC)
Bảo mật tích hợp Tự triển khai Plugin bên thứ ba Built-in (ASP.NET Identity)

3. Tích hợp ASP.NET Identity thay vì tự xây dựng hệ thống xác thực — loại bỏ các lỗ hổng bảo mật phổ biến như lưu mật khẩu dạng plaintext, giảm 100% nguy cơ SQL Injection thông qua EF Core parameterized queries.


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

Kịch bản triển khai thực tế:

  1. Môi trường Development: Visual Studio 2022 + SQL Server LocalDB, chạy trên localhost
  2. Môi trường Production: Windows Server + IIS 10, SQL Server 2019 Standard, domain riêng với SSL certificate

Yêu cầu triển khai tối thiểu:

Server:
- OS: Windows Server 2016+
- RAM: 8GB
- CPU: 2 cores, 2.0GHz+
- Storage: 50GB SSD
- .NET 6.0 Runtime
- IIS 10 với ASP.NET Core Module

Database:
- SQL Server 2014+ (Standard hoặc Express cho quy mô nhỏ)
- Storage: 10GB ban đầu

Phân tích khả năng mở rộng:

  • Quy mô hiện tại: 1 cửa hàng, ~100–500 sản phẩm, ~50 đơn hàng/ngày
  • Mở rộng ngắn hạn (6–12 tháng): Thêm tính năng coupon/khuyến mại, tích hợp đơn vị vận chuyển (GHN/GHTK API)
  • Mở rộng dài hạn: Microservices architecture cho multi-store, CDN cho tài nguyên tĩnh

Ước tính chi phí vận hành hàng tháng:

Hạng mục Chi phí ước tính
Hosting VPS (Windows) 500.000 – 1.200.000 VNĐ
Domain + SSL 150.000 – 300.000 VNĐ
SQL Server Express (miễn phí) 0 VNĐ
Bảo trì kỹ thuật Tùy nhu cầu
Tổng ~650.000 – 1.500.000 VNĐ/tháng

So sánh với phí hoa hồng Shopee (2–5% doanh thu), với doanh thu 50 triệu/tháng, cửa hàng tiết kiệm được 1–2,5 triệu VNĐ/tháng khi vận hành website riêng.


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

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

  • Thanh toán trực tuyến chỉ hỗ trợ VNPay; chưa tích hợp MoMo, ZaloPay
  • Chưa có hệ thống thông báo real-time (WebSocket/SignalR) cho trạng thái đơn hàng
  • Báo cáo thống kê dừng ở mức theo tháng, chưa có dashboard analytics nâng cao
  • Chưa triển khai tính năng tìm kiếm nâng cao (lọc theo giá, màu sắc, size)
  • Không hỗ trợ đa ngôn ngữ (i18n)

Hướng phát triển đề xuất:

  1. Tích hợp SignalR để thông báo real-time khi có đơn hàng mới
  2. Elasticsearch cho tính năng tìm kiếm full-text nâng cao
  3. Redis Cache để tối ưu hiệu suất cho trang sản phẩm (giảm database queries)
  4. Progressive Web App (PWA) để cải thiện trải nghiệm mobile
  5. Machine Learning gợi ý sản phẩm dựa trên lịch sử mua hàng (collaborative filtering)

Bài học rút ra:

  • Entity Framework Core Code-First migrations giúp quản lý schema database hiệu quả nhưng cần hiểu rõ quan hệ giữa các bảng để tránh circular dependency
  • Thiết kế phân quyền bằng ASP.NET Identity ngay từ đầu giúp tránh refactor tốn kém sau này
  • UML diagram (đặc biệt Sequence Diagram) rất hữu ích trong giai đoạn phân tích để phát hiện thiếu sót trong luồng nghiệp vụ

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

  • Sinh viên CNTT: Tài liệu tham khảo hoàn chỉnh về ASP.NET Core MVC với Entity Framework Core, Repository Pattern, và ASP.NET Identity — bao gồm 20+ biểu đồ UML và đặc tả use case chi tiết
  • Lập trình viên: Ví dụ thực tế về kiến trúc MVC 3-tier, Unit of Work pattern, và tích hợp payment gateway VNPay trong môi trường .NET 6.0
  • Chủ cửa hàng SMB: Giải pháp website bán hàng chi phí thấp với đầy đủ tính năng (CRUD sản phẩm, quản lý đơn hàng, thống kê doanh thu), tiết kiệm ~1–2,5 triệu VNĐ/tháng so với sàn thương mại điện tử
  • Nhà nghiên cứu: Phương pháp phân tích yêu cầu theo MoSCoW, mô hình hóa hệ thống với Rational Rose, và case study triển khai TMĐT cho cửa hàng bán lẻ quy mô nhỏ tại Việt Nam

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

1. Yêu cầu kỹ thuật để triển khai hệ thống? Server tối thiểu: Windows Server 2016, RAM 8GB, CPU 2 cores, cài .NET 6.0 Runtime và IIS 10. Database: SQL Server 2014+ (Express edition miễn phí đủ dùng cho quy mô nhỏ).

2. Hệ thống chịu tải được bao nhiêu người dùng đồng thời? Với cấu hình máy chủ VPS tiêu chuẩn (4 cores, 8GB RAM), ASP.NET Core có thể xử lý hàng trăm concurrent requests nhờ mô hình async/await và đa luồng. Đối với quy mô cửa hàng SMB (~100 người dùng đồng thời), cấu hình tối thiểu là đủ.

3. Tích hợp hệ thống với phần mềm kế toán hiện có? Hiện tại hệ thống chưa có API xuất dữ liệu chuẩn. Hướng mở rộng: xây dựng REST API endpoint xuất dữ liệu đơn hàng/doanh thu dạng JSON/CSV để tích hợp với phần mềm kế toán như MISA, Fast Accounting.

4. Bảo trì và cập nhật hệ thống như thế nào? EF Core Migrations cho phép cập nhật schema database không mất dữ liệu. Khuyến nghị: sao lưu database SQL Server hàng ngày (Backup Jobs), cập nhật dependencies .NET theo chu kỳ 6 tháng, kiểm thử regression sau mỗi lần cập nhật.

5. Chi phí và thời gian ROI? Chi phí vận hành ~1,5 triệu VNĐ/tháng. Nếu doanh thu online đạt 30 triệu/tháng (phí Shopee ~900.000 VNĐ = 3%), hệ thống tự hoàn vốn trong 6–12 tháng và tiết kiệm liên tục về sau.


Kết luận

Đồ án "Xây dựng Phần mềm Quản lý Bán hàng cho Cửa hàng Quần áo" đã hoàn thành mục tiêu xây dựng một hệ thống TMĐT đầy đủ chức năng trên nền tảng ASP.NET Core MVC 6.0Microsoft SQL Server, áp dụng Entity Framework Core theo kiến trúc Repository Pattern + Unit of Work.

Thành tựu kỹ thuật nổi bật:

  • Triển khai đầy đủ 14 use case với phân quyền 3 cấp (Admin/Employee/Customer)
  • Tích hợp VNPay payment gateway và thanh toán COD
  • Áp dụng ASP.NET Identity đảm bảo bảo mật chuẩn enterprise
  • Xây dựng 20+ biểu đồ UML với Rational Rose phục vụ phân tích và thiết kế hệ thống

Giá trị thực tiễn: Hệ thống giúp cửa hàng SW chuyển đổi số thành công, mở rộng kênh bán hàng 24/7, tiết kiệm chi phí vận hành so với các nền tảng TMĐT bên thứ ba, và tạo nền tảng dữ liệu cho các quyết định kinh doanh dựa trên thống kê doanh thu.

Dự án là minh chứng thực tế cho việc áp dụng công nghệ .NET hiện đại vào giải quyết bài toán kinh doanh cụ thể tại thị trường Việt Nam — đồng thời là tài liệu tham khảo có giá trị cho sinh viên và lập trình viên muốn xây dựng hệ thống TMĐT với .NET stack.

Khám phá thêm: Nếu bạn đang tìm kiếm giải pháp xây dựng website bán hàng tương tự hoặc muốn tìm hiểu sâu hơn về kiến trúc ASP.NET Core MVC, hãy tham khảo tài liệu chính thức tại docs.microsoft.com/aspnet/core và cộng đồng lập trình viên .NET Việt Nam.