Backend Web Framework
Quyết định
Phần tiêu đề “Quyết định”ASP.NET Core (web framework) · Entity Framework Core (ORM) · ASP.NET Core Identity (xác thực và identity). Ba thành phần này được chọn cùng nhau như các phần tích hợp chặt chẽ của hệ sinh thái .NET.
Lý Do
Phần tiêu đề “Lý Do”ASP.NET Core
Phần tiêu đề “ASP.NET Core”Đội ngũ có kinh nghiệm .NET hiện có từ hệ thống VB.NET legacy. ASP.NET Core cung cấp middleware pipeline có cấu trúc (tenant context injection, session validation, audit enrichment đều được thực thi trước bất kỳ request handler nào thực thi), authorization dựa trên policy được tích hợp ánh xạ trực tiếp đến mô hình permission-code, background job hosting in-process nhất quán với quyết định ranh giới monolith, và hỗ trợ cross-platform cho cả mục tiêu triển khai Windows và Linux.
Entity Framework Core
Phần tiêu đề “Entity Framework Core”Tự động tenant scoping ở cấp framework trên mọi query là yêu cầu cứng cho mô hình multitenancy. EF Core áp dụng tenant predicate cho tất cả queries trên tenant-scoped entities ở cấp framework — bỏ qua filter trong repository không phải là failure mode có thể. Nó cũng cung cấp code-first schema migration với raw SQL nhúng (cần thiết để đặt cùng vị trí row-level security policy creation với table creation) và cơ chế save interceptor đóng vai trò là điểm hook cho customization engine Giai đoạn 2.
ASP.NET Core Identity
Phần tiêu đề “ASP.NET Core Identity”Cung cấp quản lý người dùng, password hashing và identity dựa trên claims mà không cần hạ tầng mã hóa tùy chỉnh. Nó hỗ trợ cả xác thực cookie (mặc định cho frontend browser đồng host) và xác thực bearer token (cho mobile và API clients) trên cùng authorization layer — các chính sách quyền giống nhau áp dụng bất kể phương thức vận chuyển nào. Token claims được enrich tại đăng nhập với tenant identity và permissions đã resolve, loại bỏ database lookups per-request cho authorization. Nó sẵn sàng OIDC cho SSO enterprise tương lai mà không cần thay thế lớp thực thi authorization.
Các Phương Án Bị Loại
Phần tiêu đề “Các Phương Án Bị Loại”| Phương án | Lý do bị loại |
|---|---|
| Java Spring Boot | Không có kỹ năng đội ngũ; không có tương đương trực tiếp với tự động tenant query scoping ở cấp framework |
| Node.js / NestJS | Không có kỹ năng đội ngũ; đảm bảo tenant filter ở cấp framework yếu hơn |
| Go (Gin / Echo) | Không có kỹ năng đội ngũ; không có tự động tenant query scoping ở cấp framework |
| Dapper (micro-ORM) | Không có tự động query scoping — một filter bị bỏ qua trong bất kỳ repository nào là vi phạm dữ liệu tenant |
| NHibernate | Hệ sinh thái đang giảm; chậm trong hỗ trợ tính năng database cần thiết cho dự án này |
| Truy cập database thô | Giống như Dapper; boilerplate không thực tế cho ERP 30+ entity |
| Triển khai identity tùy chỉnh | Không có lý do cho chi phí và rủi ro bảo mật khi ASP.NET Core Identity đáp ứng tất cả yêu cầu |
| Managed identity-as-a-service | Giá theo người dùng không tương thích với mô hình triển khai on-premises; lo ngại về nơi lưu trữ dữ liệu cho Việt Nam |
| Self-hosted open-source identity server | Chi phí vận hành quá mức cho đội ngũ ≤5 kỹ sư; chưa phù hợp cho phạm vi Giai đoạn 1 |