Bối cảnh và vấn đề nghiên cứu
Báo cáo đồ án thuộc học phần Unit 30: Application Development (Mã môn: 1670), nằm trong chương trình đào tạo BTEC Level 5 Higher National Diploma (HND) in Computing (Niên khóa 2021 – 2022). Đề tài tập trung vào giai đoạn hiện thực hóa và đánh giá hệ thống thương mại điện tử phục vụ kinh doanh sách trực tuyến với tên gọi FPTBook (dự án mã nguồn FPTBook_v3). Đồ án tiếp nối kết quả phân tích và thiết kế phần mềm từ Assignment 1 nhằm chuyển giao sang giai đoạn lập trình, kiểm thử và tối ưu hóa sản phẩm.
Mục tiêu và nhiệm vụ nghiên cứu được quy định chặt chẽ theo chuẩn đầu ra (Learning Outcomes) của chương trình BTEC RQF:
- Mục tiêu LO3 (Work individually and as part of a team to plan and produce a functional business application with support documentation):
- Xây dựng bảng câu hỏi đánh giá phản biện chuyên môn (Formal Questionnaire/Peer Review) để thu thập ý kiến về định nghĩa bài toán, giải pháp đề xuất và chiến lược phát triển (P4).
- Diễn giải phản hồi từ đồng nghiệp và xác định các cơ hội cải tiến chưa được tính đến trước đó (M3).
- Đánh giá các ý tưởng mới hoặc cải tiến tiềm năng, lập luận rõ lý do chấp nhận hoặc từ chối đưa vào ứng dụng (D2).
- Phát triển ứng dụng doanh nghiệp hoàn chỉnh dựa trên Tài liệu thiết kế phần mềm (Software Design Document - SDD) và bài toán kinh doanh cụ thể, sử dụng các công cụ, kỹ thuật và phương pháp luận phù hợp (P5, M4).
- Mục tiêu LO4 (Evaluate the performance of a business application against its Software Design Document and initial requirements):
- Đánh giá hiệu năng của ứng dụng so với Bảng phát biểu định nghĩa bài toán (Problem Definition Statement) và các yêu cầu ban đầu (P6).
- Phân tích các yếu tố ảnh hưởng trực tiếp đến hiệu năng ứng dụng, từ đó thực hiện đánh giá phê phán (critical review) các giai đoạn thiết kế, phát triển và kiểm thử (M5).
- Đánh giá điểm mạnh, điểm yếu của ứng dụng, lập luận cơ hội cải tiến và thảo luận các rủi ro đã nhận diện từ trước (D3).
Đối tượng nghiên cứu là hệ thống ứng dụng web FPTBook phục vụ 4 nhóm người dùng mục tiêu: Quản trị viên (Administrator), Chủ cửa hàng (Owner), Khách hàng đã đăng ký (Customer/User) và Khách vãng lai (Guest). Phạm vi nghiên cứu bao quát từ khâu thiết kế thực thể cơ sở dữ liệu, phân tầng kiến trúc mã nguồn MVC, quản lý phiên bản qua Git đến triển khai ứng dụng trên máy chủ web.
Cơ sở lý thuyết và phương pháp
Đồ án vận dụng các cơ sở lý thuyết, mô hình kiến trúc và công nghệ tiêu chuẩn trong ngành kỹ thuật phần mềm:
1. Khung kiến trúc và mô hình phát triển
- Mô hình kiến trúc MVC (Model-View-Controller): Do Trygve Reenskaug đề xuất, giúp phân tách rõ ràng 3 thành phần logic chính:
- Model: Đại diện cho logic dữ liệu, tương tác trực tiếp với cơ sở dữ liệu và chuyển đổi dữ liệu thông qua phản hồi yêu cầu từ Controller.
- View: Xử lý tầng giao diện người dùng (UI), hiển thị dữ liệu nhận từ Model thông qua điều phối của Controller.
- Controller: Đóng vai trò trung gian tiếp nhận yêu cầu từ client, điều phối xử lý nghiệp vụ, thao tác với Model và lựa chọn View phù hợp để trả về kết quả.
- Hỗ trợ phát triển hướng kiểm thử (Test Driven Development - TDD) và khả năng quản lý định tuyến URL (URL-mapping) linh hoạt.
2. Công nghệ và công cụ thực hiện
- Nền tảng phát triển Backend: ASP.NET Core MVC (mã nguồn mở, đa nền tảng Windows, Linux, macOS, hiệu năng cao, phân phối dưới giấy phép MIT).
- Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server (MS SQL Server) kết hợp ngôn ngữ truy vấn cấu trúc T-SQL (Transact-SQL) và Entity Framework Core.
- Môi trường phát triển tích hợp (IDE): Microsoft Visual Studio (phiên bản Visual Studio 2017 / các bản cập nhật hỗ trợ .NET Core).
- Công nghệ Frontend: HTML5, CSS3, JavaScript và thư viện giao diện đáp ứng (responsive framework) Bootstrap do Mark Otto và Jacob Thornton phát triển.
- Quản lý mã nguồn và triển khai: Hệ thống quản lý phiên bản phân tán Git (thông qua GitHub/GitLab), máy chủ web Internet Information Services (IIS) hoặc nền tảng điện toán đám mây Microsoft Azure.
3. Phương pháp nghiên cứu và thu thập dữ liệu
- Phương pháp khảo sát đồng đẳng (Peer Review Questionnaire): Sử dụng bảng hỏi chính thức gửi đến các đồng nghiệp nhằm thu thập đánh giá định tính về chức năng xác thực, phân quyền, tìm kiếm và bảo mật dữ liệu.
- Phương pháp thiết kế mô hình hóa dữ liệu: Xây dựng Sơ đồ quan hệ thực thể (Entity Relationship Diagram - ERD) chuẩn hóa các bảng và mối liên kết khóa ngoại.
Thiết kế và triển khai
Hệ thống được khởi tạo thông qua giao diện dòng lệnh .NET CLI với lệnh dotnet new mvc -o FPTBook_v3 và chứng chỉ bảo mật dotnet dev-certs https --trust.
1. Cấu trúc thư mục dự án
Cấu trúc cây thư mục trong giải pháp FPTBook_v3 được tổ chức theo chuẩn ASP.NET Core MVC:
Areas/Identity: Chứa các tệp logic xác thực, đăng ký, điều hướng và quản lý tài khoản người dùng.
Data: Chứa lớp ngữ cảnh cơ sở dữ liệu (ApplicationDbContext) và cấu hình kết nối bảng.
Controllers: Lưu trữ các bộ điều khiển điều hướng nghiệp vụ (AdminController, BookController, CartController, CategoryController, HomeController, OrderController).
Models: Khai báo các thực thể dữ liệu (Book, Category, BookDisplayModel, Order, OrderDetail, ShoppingCart, CartDetail, Owner, ErrorViewModel).
Views: Lưu trữ giao diện Razor Views phân chia theo thư mục chức năng (Admin, Book, Cart, Category, Home, Order, Shared).
wwwroot: Thư viện tĩnh chứa CSS, JavaScript, phông chữ và thư mục uploads lưu trữ hình ảnh tải lên.
2. Mô hình thực thể cơ sở dữ liệu (Entities)
| Tên Model |
Các thuộc tính chính |
Ràng buộc & Ghi chú |
Book |
book_Id, book_Title, publication_date, book_ImagURL, book_Description, book_Price, book_Quantity, cate_Id |
Khóa chính tự tăng book_Id, khóa ngoại cate_Id liên kết Category, trường không ánh xạ book_Img (IFormFile). |
Category |
cate_Id, cate_Name, cate_Description, cate_Status |
Khóa chính cate_Id, liên kết một-nhiều với Book. Trạng thái danh mục gồm processing và processed. |
ShoppingCart |
Id, UserId |
Khóa chính Id, khóa ngoại UserId liên kết ApplicationUser, danh sách CartDetails. |
CartDetail |
Id, ShoppingCartId, BookId, Quantity, UnitPrice |
Khóa ngoại trỏ về ShoppingCart và Book. |
Order |
Id, UserId, CreateDate |
Khóa ngoại trỏ về ApplicationUser, liên kết danh sách OrderDetail. |
OrderDetail |
OrderId, BookId, Quantity, UnitPrice |
Khóa ngoại kép trỏ về Order và Book. |
Owner |
Name, Email, Phone, Image, Password, ConfirmPassword, Img |
Lớp DTO/ViewModel tạo tài khoản Owner; ràng buộc số điện thoại 10 chữ số, mật khẩu từ 6 đến 100 ký tự. |
BookDisplayModel |
Books, Categorys, STerm, GenreId |
ViewModel hỗ trợ tìm kiếm và lọc sách theo danh mục trên giao diện Home/Index. |
3. Hiện thực hóa các Controller nghiệp vụ chính
AdminController (Gán quyền [Authorize(Roles = "Admin")]):
ShowUser() / ShowOwner(): Truy vấn danh sách người dùng theo vai trò thông qua bảng liên kết UserRoles và Roles.
RequestCategory() / Approval() / Reject(): Kiểm duyệt các yêu cầu tạo danh mục từ Owner có trạng thái cate_Status == "processing", cập nhật thành processed.
RegisterOwner(): Tiếp nhận thông tin từ ViewModel Owner, xử lý lưu tệp hình ảnh vào hệ thống thông qua _fileService, tạo tài khoản ApplicationUser và gán vai trò Owner bằng UserManager.
BookController (Gán quyền [Authorize(Roles = "Owner")]):
Create() / Edit(): Xử lý thêm mới và cập nhật sách. Kiểm tra ràng buộc hợp lệ: book_Quantity >= 0 và book_Price >= 0.
UploadFile(): Kiểm tra định dạng tệp tải lên (chỉ cho phép đuôi mở rộng .jpeg), tạo tên tệp ngẫu nhiên Guid.NewGuid() và lưu vào wwwroot/uploads.
GetBooks(): Thực hiện phép kết nối (JOIN) giữa bảng Books và Categorys để hiển thị danh sách sách kèm tên danh mục.
CartController (Gán quyền [Authorize(Roles = "User")]):
AddItem() / AddItemCart(): Thêm sản phẩm vào giỏ hàng của người dùng đã đăng nhập; nếu sản phẩm đã có thì tăng Quantity, nếu chưa thì tạo bản ghi CartDetail mới kèm UnitPrice.
RemoveItem() / RemoveCartItem(): Xóa bớt hoặc loại bỏ hoàn toàn sản phẩm khỏi giỏ hàng.
Checkout(): Kiểm tra số lượng tồn kho của sách trước khi tạo đơn hàng. Nếu không đủ số lượng, thông báo lỗi The number of products is not enough!; nếu hợp lệ, hoàn tất đơn hàng và thông báo Order Success.
Nội dung chính theo từng phần của báo cáo
Báo cáo được triển khai thành các phân vùng nội dung theo đúng cấu trúc tiêu chí đánh giá BTEC:
1. Bảng câu hỏi đánh giá phản biện chuyên môn (Formal Questionnaire)
Phần này tổng hợp 5 hạng mục khảo sát ý kiến đồng nghiệp vào tháng 2 và tháng 3 năm 2023 nhằm rà soát tính khả thi và định hướng nâng cấp:
- Chức năng Log-in (20/02/2023): Khảo sát nhu cầu đăng nhập bằng tài khoản mạng xã hội (Google, Facebook) và việc lưu thông tin tài khoản qua cookies. Phản hồi xác nhận hệ thống hiện chưa hỗ trợ OAuth nhưng sẽ tích hợp trong tương lai; việc lưu tài khoản chỉ phục vụ đăng nhập nhanh mà không thu thập cookies riêng tư của người dùng.
- Chức năng Register (21/03/2023): Đánh giá cơ chế xác thực tài khoản. Phản hồi ghi nhận đề xuất gửi mã/link xác thực qua Email và lên kế hoạch triển khai.
- Chức năng Edit information (21/03/2023): Làm rõ thẩm quyền can thiệp dữ liệu của Administrator. Hệ thống chỉ cho phép Admin thay đổi hoặc xóa tài khoản người dùng khi có sự đồng ý hoặc ủy quyền hợp lệ từ phía người dùng.
- Chức năng Searching (21/03/2023): Xác nhận khả năng tìm kiếm sách linh hoạt dựa trên tác giả, nhà xuất bản và mô tả chi tiết khi khách hàng không nhớ chính xác tên sách.
- Phân quyền người dùng - Role (22/03/2023): Xác định hệ thống phân cấp 3 bậc:
Administrator > Business Owner > Customer/Client. Tài khoản có quyền cấp cao hơn có thể sử dụng các chức năng của tài khoản cấp thấp hơn, nhưng tài khoản cấp thấp không thể truy cập tài nguyên của cấp cao hơn.
2. Phát triển ứng dụng và quản lý mã nguồn (Application Development)
- Trình bày chi tiết cơ sở lý thuyết các công nghệ: Visual Studio (lịch sử phát triển từ bản 97 đến bản 15.0/2017, hỗ trợ 36 ngôn ngữ), Microsoft SQL Server, HTML5, CSS, Bootstrap và ASP.NET Core.
- Khai báo và ánh xạ các lớp Model, View Razor và Controller xử lý luồng dữ liệu.
- Minh họa cấu trúc quản lý mã nguồn trên kho chứa GitHub/GitLab và quy trình xuất bản ứng dụng lên IIS/Azure.
3. Đánh giá hiệu năng và phân tích hệ thống (Application Review)
- Đối chiếu các chức năng đã xây dựng với Bảng phát biểu định nghĩa bài toán và Đặc tả yêu cầu phần mềm (SRS).
- Phân tích các yếu tố tác động đến hiệu năng: tốc độ truy vấn cơ sở dữ liệu thông qua Entity Framework, dung lượng tệp tin tải lên tại
wwwroot/uploads và khả năng đáp ứng giao diện trên nhiều thiết bị của Bootstrap.
- Đánh giá ưu điểm và hạn chế trong thiết kế kiến trúc và độ an toàn của hệ thống.
Kết quả và đóng góp
1. Bảng tổng hợp kết quả phân quyền chức năng đã triển khai
| Vai trò người dùng (Role) |
Chức năng nghiệp vụ đã hiện thực hóa |
| Administrator |
Đăng nhập, đăng xuất, tạo tài khoản Owner (RegisterOwner), quản lý tài khoản Owner và User (ShowOwner, ShowUser), duyệt yêu cầu danh mục (RequestCategory, Approval, Reject). |
| Owner (Chủ cửa hàng) |
Đăng nhập, đăng xuất, quản lý sách (CRUD: thêm, sửa, xóa, hiển thị kèm tải ảnh JPEG), gửi yêu cầu tạo danh mục sách, quản lý đơn hàng. |
| Customer (Khách hàng) |
Đăng ký, đăng nhập, đăng xuất, quản lý thông tin tài khoản, quản lý giỏ hàng (AddItem, RemoveItem, GetUserCart), kiểm tra số lượng và thanh toán (Checkout), xem trước và tìm kiếm sách, xem trang giới thiệu (About). |
| Guest (Khách vãng lai) |
Xem trước sách, tìm kiếm sách, xem trang giới thiệu (About), đăng ký tài khoản mới. |
2. Đóng góp kỹ thuật của đồ án
- Xây dựng thành công ứng dụng web thương mại điện tử
FPTBook_v3 đáp ứng đầy đủ tiêu chí chuẩn đầu ra LO3 và LO4 của Unit 30 BTEC HND.
- Ứng dụng chuẩn mực mô hình kiến trúc MVC trên nền tảng ASP.NET Core, phân tách rõ ràng giữa tầng dữ liệu, logic điều khiển và tầng hiển thị.
- Thiết lập quy trình phản biện chuyên môn có hệ thống (Peer Review), biến phản hồi thực tế thành căn cứ để định hình lộ trình nâng cấp phần mềm.
Hạn chế và hướng nghiên cứu tiếp
1. Hạn chế của hệ thống
- Chưa hỗ trợ cơ chế đăng nhập liên kết qua bên thứ ba (Google, Facebook OAuth).
- Quy trình đăng ký tài khoản chưa tích hợp dịch vụ gửi email xác thực tự động để kích hoạt tài khoản.
- Bộ lọc định dạng tệp hình ảnh tải lên cho sách mới chỉ cho phép định dạng
.jpeg, chưa mở rộng cho các định dạng phổ biến khác như .png hay .webp.
- Tính năng tìm kiếm trên giao diện
BookDisplayModel mới chỉ dừng ở mức lọc theo từ khóa tiêu đề (STerm) và mã thể loại (GenreId), chưa tích hợp bộ lọc sâu đa tiêu chí theo nhà xuất bản và tác giả.
2. Hướng phát triển tiếp theo
- Tích hợp Identity Third-Party Authentication (Google / Facebook Login API).
- Xây dựng dịch vụ gửi email tự động (Email Confirmation Service) bằng SMTP để phục vụ xác thực tài khoản và thông báo trạng thái đơn hàng.
- Tối ưu hóa bộ điều khiển tìm kiếm nâng cao kết hợp phân trang dữ liệu (Pagination) trên giao diện người dùng.
Giá trị tham khảo
Báo cáo đồ án là tài liệu tham khảo hữu ích cho:
- Sinh viên chuyên ngành Công nghệ thông tin: Đặc biệt là sinh viên theo học chương trình BTEC Level 5 HND in Computing đang chuẩn bị thực hiện Assignment 2 của Unit 30 (Application Development).
- Lập trình viên Web .NET mới bắt đầu: Cung cấp cấu trúc dự án mẫu hoàn chỉnh về ASP.NET Core MVC, phương pháp phân quyền dựa trên Role (
Admin, Owner, User), kỹ thuật thao tác CRUD thực thể có liên kết khóa ngoại và logic xử lý giỏ hàng/thanh toán.
- Tài liệu tham khảo quy trình: Minh họa phương pháp lập bảng câu hỏi khảo sát phản biện (Peer Review) và đối chiếu kết quả thực nghiệm với các tiêu chí Pass, Merit, Distinction theo chuẩn khảo thí RQF.
Câu hỏi thường gặp
1. Hệ thống FPTBook phân cấp người dùng và quyền hạn truy cập như thế nào?
Hệ thống phân chia thành 4 nhóm vai trò với thứ bậc quyền hạn: Administrator > Owner > Customer > Guest. Tài khoản cấp cao có thể sử dụng các chức năng của tài khoản cấp thấp hơn, trong khi tài khoản cấp thấp không thể truy cập tài nguyên của cấp cao hơn.
2. Quy trình kiểm duyệt danh mục sách giữa Owner và Administrator diễn ra như thế nào trong mã nguồn?
Khi Owner gửi yêu cầu tạo danh mục mới, danh mục được lưu với trạng thái cate_Status = "processing". Tại AdminController, hàm RequestCategory() sẽ lọc ra các danh mục này. Administrator có thể chọn duyệt thông qua hàm Approval() để chuyển trạng thái thành processed (cho phép hiển thị khi tạo sách) hoặc từ chối thông qua hàm Reject().
3. Điều kiện hợp lệ khi thêm mới hoặc chỉnh sửa thông tin sách trong BookController là gì?
Khi tạo hoặc sửa sách, hệ thống bắt buộc số lượng (book_Quantity) và giá bán (book_Price) phải lớn hơn hoặc bằng 0 (book_Quantity < 0 || book_Price < 0 sẽ bị báo lỗi). Tệp hình ảnh tải lên phải có phần mở rộng là .jpeg, được gán tên duy nhất bằng Guid.NewGuid() và lưu vào thư mục wwwroot/uploads.
4. Quá trình xử lý giỏ hàng và đặt hàng trong CartController kiểm soát số lượng tồn kho ra sao?
Khi người dùng chọn thanh toán (Checkout), hàm DoCheckout() sẽ kiểm tra số lượng hàng trong giỏ so với tồn kho thực tế. Nếu không đủ số lượng, hệ thống trả về thông báo lỗi The number of products is not enough!; nếu hợp lệ, đơn hàng được khởi tạo thành công với thông báo Order Success.
5. Kết quả khảo sát phản biện (Questionnaire) đưa ra định hướng gì cho chức năng đăng nhập và bảo mật?
Khảo sát chỉ ra hệ thống cần bổ sung tính năng đăng nhập bằng mạng xã hội (Google/Facebook) và xác thực tài khoản qua email trong tương lai. Đồng thời, hệ thống cam kết chỉ lưu thông tin tài khoản đăng ký để hỗ trợ đăng nhập nhanh mà không thu thập dữ liệu cookies riêng tư của người dùng.
Kết luận
Đồ án "Phát triển ứng dụng BTEC HND: Đánh giá & Cải tiến" đã phản ánh toàn diện quá trình hiện thực hóa ứng dụng web thương mại điện tử FPTBook trên nền tảng ASP.NET Core MVC và MS SQL Server. Báo cáo đáp ứng đầy đủ các tiêu chuẩn học thuật của Unit 30 (LO3 và LO4), từ khâu thiết kế cơ sở dữ liệu, phân quyền đa người dùng, xây dựng logic giỏ hàng đến kiểm thử và phân tích hiệu năng. Các kết quả khảo sát phản biện đồng nghiệp là cơ sở khoa học quan trọng giúp tác giả đánh giá đúng thực trạng hệ thống và xác định rõ lộ trình nâng cấp các tính năng bảo mật, xác thực trong tương lai.