-->

Tiêu chuẩn Level 7 Architecture-Domain Layer

Dựa trên tiêu chuẩn Level 7 Architecture đang áp dụng trong hệ thống, Domain Layer (Tầng Nghiệp vụ/Lõi) trong codebase được thiết kế và phân bổ theo các nguyên tắc sau:

1. Định nghĩa Hợp đồng và Mô hình cốt lõi (Contract Layer - src/schema/)

  • Centralized Schema: Toàn bộ các quy tắc nghiệp vụ về tính hợp lệ của dữ liệu (Zod validation) và các hằng số dùng chung (Statuses, Units) bắt buộc phải đặt tại thư mục src/schema/. Đây chính là nơi định nghĩa "Hình hài" chuẩn của Domain.
  • Barrel Exports: Quản lý xuất/nhập khẩu thống nhất qua src/schema/index.ts để tránh xung đột tên.

2. Định nghĩa Kiểu dữ liệu Nghiệp vụ (Domain Models)

Hệ thống phân tách rõ ràng giữa cấu trúc dữ liệu thô và dữ liệu nghiệp vụ:

  • Infrastructure Isolation: File database.types.ts được giữ nguyên bản, chỉ phản ánh đúng cấu trúc bảng dưới cơ sở dữ liệu.
  • Biểu diễn Domain: Cấu trúc dữ liệu đã qua xử lý, join bảng, hoặc map các trường (Domain Models) được khai báo tại các file types.ts nằm ngay bên trong từng thư mục feature (src/features/*/types.ts).

3. Thực thi Business Logic (Use-Case Role)

Thay vì sử dụng các class Service truyền thống, codebase này quyết định sử dụng Custom Hooks (src/features/*/use*.ts) để đóng vai trò là các Use-Cases của Domain.

Các file hook này chịu trách nhiệm:

  • Data Mapping (Raw -> Domain): Chuyển đổi dữ liệu thô từ API/DB thành các Domain Models để UI có thể sử dụng trực tiếp.
  • Quản lý Trạng thái: Xử lý thống nhất toàn bộ các trạng thái nghiệp vụ (Loading, Error, Success).
  • Cache Invalidation: Quản lý sự đồng bộ dữ liệu (thông qua React Query).

Các file UI Component tuyệt đối không được chứa logic biến đổi dữ liệu, mà chỉ đóng vai trò tiêu thụ (consume) kết quả trả về từ các Use-Case (Hooks) này.

Tổng kết luồng đi của Domain

  1. Infra (src/services/supabase/) lấy dữ liệu thô.
  2. API/Logic (src/api/ & use*.ts) kéo dữ liệu về và map sang cấu trúc Domain.
  3. Contract (src/schema/) đối chiếu và validate dữ liệu có chuẩn format nghiệp vụ hay không.
  4. UI (src/features/*/*.tsx) nhận Domain Data sạch và render, không dính líu đến bất kỳ logic nghiệp vụ nào.

Đăng nhận xét

Mới hơn Cũ hơn