Tùy Chỉnh
Lưu ý: Kiến trúc plugin (mở rộng mã trong môi trường sandbox cho các trường hợp cấu hình không đủ) chưa được quyết định và không được đề cập ở đây. Sẽ được ghi lại riêng khi phương án được chọn.
Tổng Quan
Phần tiêu đề “Tổng Quan”BPO ERP loại bỏ việc phân nhánh mã theo từng tenant thông qua công cụ tùy chỉnh dựa trên cấu hình. Hành vi đặc thù của tenant — trường tùy chỉnh, quy tắc xác thực và bước quy trình công việc — được biểu diễn dưới dạng metadata lưu trữ và được áp dụng tại runtime bởi nền tảng. Không thay đổi mã; không cần triển khai lại.
Trường Tùy Chỉnh
Phần tiêu đề “Trường Tùy Chỉnh”Quyết định: Cột JSON mở rộng trên mọi thực thể có phạm vi tenant, được quản lý bởi registry định nghĩa trường theo tenant cho mỗi loại thực thể.
Định nghĩa trường tùy chỉnh chỉ định kiểu dữ liệu, nhãn, bắt buộc/tùy chọn và các giá trị được phép. Xác thực khi ghi được xử lý bởi hook lưu — các trường bắt buộc, kiểu dữ liệu và ràng buộc. Mã nền tảng không bao giờ đọc giá trị trường tùy chỉnh bằng khóa cố định; luôn đi qua registry định nghĩa.
Tại sao không EAV (Entity-Attribute-Value): Hiệu năng truy vấn rất kém; join qua các bảng EAV chậm và phức tạp.
Tại sao không shadow tables: Yêu cầu thay đổi schema cho mỗi loại thực thể mới — phủ nhận mục tiêu “không cần triển khai lại”.
Quy Tắc Xác Thực Tùy Chỉnh
Phần tiêu đề “Quy Tắc Xác Thực Tùy Chỉnh”Quyết định: Cây điều kiện được lưu dưới dạng cấu hình có cấu trúc, được đánh giá bởi engine quy tắc nền tảng tại hook lưu của domain service.
Quy tắc biểu diễn ràng buộc nghiệp vụ — so sánh field, kiểm tra phạm vi, tham chiếu chéo field và tham chiếu đến trường tùy chỉnh — dưới dạng cây khai báo. Không có mã thực thi; nền tảng đánh giá cây. Quy tắc được lưu trong cấu hình theo tenant và loại thực thể.
Bước Quy Trình Tùy Chỉnh
Phần tiêu đề “Bước Quy Trình Tùy Chỉnh”Quyết định: Định nghĩa quy trình được lưu dưới dạng cấu hình. Nền tảng cung cấp engine thực thi; tenant cung cấp các bước định nghĩa.
Một quy trình được kích hoạt bởi domain event trên một loại thực thể cụ thể. Nó thực thi một chuỗi bước — phê duyệt, thông báo, cập nhật field — mỗi bước có thể có điều kiện bảo vệ sử dụng cùng DSL với quy tắc xác thực. Mọi command domain Phase 1 có thể kích hoạt quy trình phải publish một domain event, dù chưa có subscriber nào cho đến Phase 2.