Bốn trục tách riêng giúp SaaS giáo dục đa tenant không phải viết lại
Cách chúng tôi mô hình hoá tenant, môn học, vai trò và tính năng trong EduPro để thêm môn mới mà không nhân bản màn hình.
Khi xây một nền tảng cho nhiều trung tâm giáo dục, câu hỏi khó nhất không nằm ở công nghệ. Nó nằm ở chỗ: những gì giống nhau giữa các trung tâm, và những gì khác?
Hai trung tâm dạy tiếng Anh vận hành gần giống nhau. Một trung tâm toán thì khác hẳn: cách xếp lớp, cách chấm tiến độ, cách trao đổi với phụ huynh. Nếu mỗi khác biệt sinh ra một nhánh code, sau vài môn học hệ thống sẽ thành mê cung.
Bốn trục thay vì một ma trận khổng lồ
Với EduPro, chúng tôi tách vấn đề thành bốn quan hệ độc lập:
- Tenant và môn học. Mỗi trung tâm gắn với một loại môn học, đọc từ cấu hình của tenant chứ không viết cứng trong code.
- Người dùng và vai trò. Một người có thể giữ nhiều vai trò: chủ trung tâm, tư vấn, vận hành, kế toán, giáo viên.
- Vai trò và tính năng. Vai trò quyết định menu và quyền truy cập, thông qua một hồ sơ vai trò.
- Vai trò và góc nhìn. Cùng một nghiệp vụ, mỗi vai trò thấy một màn hình phù hợp với việc của mình.
Điểm quan trọng là bốn trục này không nhân với nhau trong code. Thêm một môn học là thêm cấu hình và nghiệp vụ riêng của môn đó. Thêm một vai trò là thêm một hồ sơ. Không trục nào buộc phải sửa trục kia.
Vì sao cách này đỡ tốn kém về sau
Chi phí của phần mềm nhiều khách hàng nằm ở việc thay đổi, không nằm ở lần xây đầu tiên. Khi ranh giới được vẽ đúng ngay từ đầu, một yêu cầu như “trung tâm này muốn kế toán thấy thêm báo cáo công nợ” chỉ chạm vào đúng một chỗ.
Cách này cũng giúp tách hai nhóm người dùng khác hẳn nhau: nhân viên của từng trung tâm, và đội vận hành nền tảng. Hai nhóm dùng hai giao diện và hai phạm vi quyền riêng, nên một lỗ hổng ở bên này không mở cửa sang bên kia.
Điều rút ra
Trước khi chọn framework hay cơ sở dữ liệu, hãy liệt kê những trục thay đổi độc lập của sản phẩm. Nếu hai thứ có thể đổi mà không kéo theo nhau, đừng để chúng chung một chỗ trong code.