Giới thiệu
Xin chào các bạn! Cám ơn các bạn đã ghé thăm ProG Coder.
Hôm nay, mình muốn chia sẻ với các bạn một dự án mà mình đã ấp ủ và dành nhiều tâm huyết: ProG Coder Shop. Đây là một hệ thống thương mại điện tử (E-commerce) hoàn chỉnh được xây dựng dựa trên kiến trúc Microservices và nền tảng .NET 8 mới nhất.
Kiến trúc tổng thể của hệ thống ProG Coder Shop
Dự án này hoàn toàn miễn phí (Open Source). Mình phát triển nó với mong muốn cung cấp một tài liệu tham khảo chất lượng cao, "sát sườn" thực tế nhất cho cộng đồng lập trình viên .NET.
1. Các Design Patterns Cốt Lõi (Architecture Patterns)
Để vận hành một hệ thống phân tán phức tạp, mình đã áp dụng các mẫu thiết kế (Design Patterns) tiêu chuẩn để đảm bảo sự ổn định và dễ bảo trì:
1.1. Clean Architecture & DDD
Dự án tuân thủ nghiêm ngặt Clean Architecture kết hợp với Domain-Driven Design (DDD). Mã nguồn được phân chia thành các lớp rõ ràng (Domain, Application, Infrastructure, API), giúp code độc lập với framework và dễ dàng Unit Test.
1.2. Vertical Slice Architecture
Thay vì chia project theo các layer ngang (Controller, Service, Repository), mình áp dụng Vertical Slice Architecture. Mỗi tính năng (Feature) được gom trọn vẹn "từ A đến Z" (từ API đến Database) vào một folder duy nhất. Điều này giúp tăng tính gắn kết (Cohesion) và giảm thiểu việc phải sửa đổi quá nhiều file khi update một tính năng.
1.3. Các Pattern Nâng Cao Khác
- CQRS (Command Query Responsibility Segregation): Tách biệt luồng Đọc (Query) và Ghi (Command) để tối ưu hóa hiệu năng.
- Mediator Pattern: Sử dụng thư viện MediatR để giảm sự phụ thuộc trực tiếp giữa các object, giúp code lỏng lẻo (Loose coupling) hơn.
- Outbox & Inbox Pattern: Giải quyết bài toán "Dual-Write" và đảm bảo tính nhất quán dữ liệu (Consistency) trong các giao dịch phân tán.
- Proxy Pattern: Sử dụng YARP làm Reverse Proxy.
2. Tech Stack
Dự án hội tụ những công nghệ đang rất "hot" và được các doanh nghiệp săn đón:
- Backend: Sử dụng .NET 8 (và lộ trình sẽ lên .NET 10).
- Frontend: Combo ReactJS + Vite + TailwindCSS. Đảm bảo trải nghiệm người dùng mượt mà và giao diện hiện đại.
- API Gateway: YARP (Yet Another Reverse Proxy) của Microsoft.
3. Hệ Thống Microservices: Nghiệp Vụ & Công Nghệ Chuyên Biệt
Thay vì sử dụng một công nghệ cho tất cả, mình áp dụng triết lý Polyglot Persistence. Mỗi Service được "đo ni đóng giày" với công nghệ và Pattern phù hợp nhất cho nghiệp vụ của nó:
- Catalog Service (Quản lý sản phẩm):
Sử dụng MartenDB (trên nền PostgreSQL). Cho phép lưu trữ dữ liệu sản phẩm dưới dạng Document (JSON) linh hoạt (NoSQL) nhưng vẫn giữ được khả năng Transaction mạnh mẽ của SQL.
- Basket Service (Giỏ hàng):
Yêu cầu tốc độ truy xuất cực nhanh. Sử dụng mô hình lai: Redis để lưu Cache Session và MongoDB để lưu trữ bền vững dữ liệu giỏ hàng.
- Order Service (Đơn hàng):
Trái tim của hệ thống. Sử dụng SQL Server để đảm bảo tính toàn vẹn dữ liệu (ACID) tuyệt đối cho quy trình xử lý đơn hàng phức tạp.
- Inventory Service (Kho vận):
Quản lý số lượng tồn kho và giữ hàng (Stock Reservation). Sử dụng MySQL - một lựa chọn kinh điển và hiệu quả cho bài toán này.
- Discount Service (Khuyến mãi):
Quản lý Coupon và chính sách giá. Cung cấp giao thức gRPC để các service khác (Basket, Order) gọi sang tính toán giá tiền với độ trễ thấp nhất (Low Latency).
- Notification Service (Thông báo):
Gửi Email/SMS cho khách hàng. Áp dụng Strategy Pattern để dễ dàng chuyển đổi linh hoạt giữa các nhà cung cấp dịch vụ gửi tin (Email Provider, SMS Gateway) mà không cần sửa code.
- Search Service (Tìm kiếm):
Tích hợp Elasticsearch, mang lại trải nghiệm tìm kiếm Full-text, gợi ý từ khóa và lọc sản phẩm đa tiêu chí với tốc độ "ánh sáng".
- Report Service (Báo cáo):
Service chuyên biệt để tổng hợp số liệu, vẽ biểu đồ doanh thu. Tách biệt hoàn toàn để việc chạy báo cáo nặng không làm chậm các giao dịch bán hàng (OLTP).
- Communication Service (Giao tiếp Real-time):
Sử dụng SignalR để tạo kết nối WebSocket, đẩy các thông báo thời gian thực xuống Client (Web App) ngay khi có sự kiện xảy ra.
Hạ tầng giao tiếp (Communication Backbone):
- RabbitMQ (Asynchronous): Dùng cho giao tiếp bất đồng bộ giữa các services (Event-Driven), giúp hệ thống lỏng lẻo (Loose Coupling) và dễ mở rộng.
- gRPC (Synchronous): Dùng cho giao tiếp nội bộ giữa các services khi cần tốc độ phản hồi cực nhanh (Low Latency) và băng thông thấp.
4. CI/CD Pipeline với GitHub Actions
Để mô phỏng quy trình làm việc chuyên nghiệp, dự án đã thiết lập sẵn hệ thống CI/CD (Continuous Integration / Continuous Deployment) tự động hoàn toàn bằng GitHub Actions.
- Build Service: Tự động build và test code mỗi khi có Pull Request.
- Docker Image: Tự động đóng gói Docker Image và đẩy lên Docker Hub.
- Deployment: Sẵn sàng để deploy lên môi trường Server/Kubernetes.
5. Hình Ảnh Demo Thực Tế
Giao diện người dùng và trang quản trị đều được chăm chút tỉ mỉ:
Trang dành cho Khách hàng (Storefront)
Trang Quản trị (Admin Dashboard)
6. Lời Kết
Nếu bạn thấy dự án hữu ích, đừng ngần ngại tặng mình 1 Star ⭐ trên GitHub nhé.
Link Source Code và hướng dẫn cài đặt chi tiết mình để ở bên dưới.
Cám ơn các bạn đã quan tâm!