Câu trả lời phụ thuộc vào việc Anh Chị hiểu đúng ranh giới giữa tầng token và tầng component.
Có, nếu làm đúng cách. Tầng token (giá trị thiết kế như màu sắc, khoảng cách, chữ) là dữ liệu trung lập, không ràng buộc vào bất kỳ khung công nghệ nào, nên tương thích với hầu hết stack hiện đại. Phần component mới là chỗ phải bám chặt vào công nghệ đội đang dùng: React, Vue hay Web Components. Nên chốt stack trước khi dựng component, và đừng để studio chọn hộ.
Câu hỏi này Sinh Vũ nghe nhiều: "Hệ thống design system Anh Chị xây có chạy được trên React của đội em không?" Câu trả lời phụ thuộc vào việc phân biệt đúng hai tầng trong một design system: tầng token và tầng component. Hai tầng này có quan hệ khác nhau hoàn toàn với stack công nghệ.
Token là đơn vị thiết kế nhỏ nhất: màu sắc, khoảng cách, cỡ chữ, độ bo góc. Chúng được lưu dưới dạng dữ liệu theo chuẩn DTCG (Design Tokens Community Group, nhóm cộng đồng quốc tế đặt ra định dạng chung cho token thiết kế). Định dạng này là dữ liệu thuần, không viết bằng JavaScript, không phụ thuộc vào React hay Vue.
Công cụ như Style Dictionary (thư viện chuyển đổi token thành biến CSS, SCSS, hoặc mã cho từng nền tảng) có thể xuất token thành biến CSS dùng được trên mọi nền tảng web. Điều này có nghĩa: dù đội Anh Chị dùng React, Vue, Angular hay thậm chí một framework ít phổ biến hơn, token vẫn vào được qua biến CSS.
Component (thành phần giao diện như nút bấm, ô nhập liệu, thẻ thông tin) là mã nguồn thật. Viết component React thì không dùng được trong Vue, và ngược lại. Đây là tầng duy nhất phải khớp với stack thật của đội.
Lỗi phổ biến nhất Sinh Vũ thấy ở các dự án: studio tự chọn khung công nghệ mà họ quen dùng, giao xong component thì đội khách không đọc được, không sửa được, không bảo trì được. Hệ thống chết ngay từ tháng đầu sau khi bàn giao.
Nguyên tắc Sinh Vũ giữ cứng: component phải dựng theo đúng công nghệ đội đang dùng, không ép đội học stack lạ chỉ để dùng được bộ này.
Web Components (chuẩn web gốc cho phép tạo thành phần giao diện chạy được trên mọi khung) là lựa chọn đáng cân nhắc trong một tình huống cụ thể: đội có nhiều sản phẩm chạy trên các khung khác nhau và cần dùng chung một bộ component.
Dựng component theo một khung
Phù hợp khi cả đội thống nhất một stack. Trải nghiệm lập trình tốt hơn, tận dụng được hết tính năng của khung đó. Bảo trì dễ hơn về dài hạn.
Dựng bằng Web Components
Phù hợp khi nhiều sản phẩm dùng khung khác nhau cần dùng chung một bộ. Chạy được xuyên khung, nhưng có đánh đổi: một số tính năng cao của từng khung không dùng được, và trải nghiệm của lập trình viên đôi khi kém mượt hơn component viết thuần theo khung đó.
Sinh Vũ giữ ranh giới rõ trong dịch vụ: bộ token theo chuẩn DTCG là lớp trung lập dùng cho hầu hết nền tảng web. Component thì dựng theo công nghệ đội khách đang thật sự dùng, React, Vue hoặc Web Components.
Không xây component cho stack độc lạ mà chưa thảo luận trước. Giao một hệ không ai nuôi được còn tệ hơn không giao.
Quan điểm vận hành, Sinh Vũ
Trước khi bắt tay vào dựng component, Sinh Vũ sẽ hỏi rõ: đội dùng stack nào, có sản phẩm nào chạy trên khung khác không, và ai là người sẽ bảo trì hệ sau khi bàn giao. Ba câu hỏi đó quyết định cấu trúc của cả dự án.
Chủ đề: Hệ thống design system có hợp với công nghệ đội bạn không. Cẩm nang Sinh Vũ, sinhvu.com
Bấm chọn từng mục Anh / Chị thấy đúng, rồi bấm in hoặc lưu thành PDF để mang theo.
Nếu Anh / Chị đánh dấu phần lớn ở nhóm dấu hiệu trên, đây là lúc nên trao đổi kỹ hơn. Sinh Vũ có thể cùng Anh / Chị soi lại và đề xuất hướng đi.
Design Tokens Community Group (DTCG); Style Dictionary; Figma Code Connect và tài liệu Web Components; quan điểm vận hành thực tế của Sinh Vũ.
Token là dữ liệu thuần: màu, kích thước, font, khoảng cách, được lưu dưới dạng biến trung lập theo chuẩn DTCG (Design Tokens Community Group). Dữ liệu này không viết bằng React hay Vue, nên dùng được ở mọi nơi. Component mới là mã nguồn thật, phải viết theo đúng khung của đội. Nếu đội dùng React mà studio giao component Vue, gần như không ai bảo trì được.
Đây là tình huống cần thiết kế kỹ hơn. Token vẫn làm lớp chung cho tất cả vì nó trung lập với khung. Component thì có hai hướng: dựng riêng theo từng khung, hoặc dùng Web Components làm lớp dùng chung xuyên khung. Web Components chạy được trên React, Vue, Angular đều, nhưng có đánh đổi về tính năng và trải nghiệm lập trình so với component viết thuần theo khung đó. Sinh Vũ sẽ thảo luận rõ trước khi chọn hướng.