Cordis: Meta-Framework Spatiotemporal Composability
Cordis mã hóa spatiotemporal composability thành một hệ thống plugin trên nền Effect. Ý tưởng thực sự mới lạ, nhưng API chưa ổn định và dự án còn ở giai đoạn sớm. Đáng thử nếu bạn đã gắn bó sâu với hệ sinh thái Effect-TS và muốn thử nghiệm các pattern điều phối theo thời gian; bỏ qua nếu bạn cần công cụ ổn định cho production ngay bây giờ.
Cordis là gì
Cordis là một meta-framework TypeScript xây trên nền thư viện Effect. Thay vì quy định sẵn tính năng, nó cung cấp các primitive composition để xây plugin xử lý cả vấn đề không gian (code chạy ở đâu) và thời gian (khi nào kích hoạt). Framework coi hai yếu tố này là đơn vị hạng nhất, có thể compose trong kiến trúc của bạn.
Vấn đề composability
Đa số framework coi composition thuần túy là vấn đề cấu trúc. Các module kết nối với nhau, nhưng hành vi runtime và việc điều phối vẫn rối rắm. Spatiotemporal composability cho developer những abstraction tường minh, có thể compose được cho việc effect chạy khi nào và ở đâu trong hệ thống phân tán — không chỉ là module nào phụ thuộc module nào, mà còn là chúng chạy ở đâu và kích hoạt lúc nào.
Tính năng cốt lõi
- ✓Xây trên Effect-TS — Cordis yêu cầu Effect làm dependency và re-export type cùng utility của thư viện này
- ✓Primitive composition spatiotemporal — API tường minh để compose plugin qua cả chiều thời gian lẫn không gian
- ✓Thiết kế plugin-first — nhiệm vụ của framework là host và compose plugin của bạn, không áp đặt bộ tính năng cố định
- ✓Temporal hook — các sự kiện vòng đời và lịch trình có thể compose được, không phải side-effect gắn thêm
- ✓Mô hình điều phối phân tán — vấn đề không gian bao gồm cả nơi effect chạy, không chỉ là phụ thuộc gì
- ✓Giấy phép MIT, viết hoàn toàn bằng TypeScript
Cài đặt Cordis
npm install cordis
Xây plugin với Cordis
Import các type và primitive cốt lõi từ package. Định nghĩa một plugin bằng cách compose các đơn vị thời gian và không gian với nhau, rồi đăng ký với một Cordis host. Tài liệu primer hướng dẫn một ví dụ plugin tối giản từ đầu. Vì API chưa ổn định, việc ghim phiên bản dependency và xem changelog trước mỗi lần cập nhật là điều bắt buộc.
Xây gì với Cordis
- •Plugin cho serverless function cần khởi động và tắt phối hợp qua nhiều provider — temporal composition xử lý vấn đề thứ tự mà không cần tự viết state machine
- •Dịch vụ backend phân tán cần biểu diễn vòng đời module và messaging liên node như một đơn vị composable duy nhất — spatial primitive cho phép giới hạn effect vào node hoặc zone cụ thể
- •Dịch vụ backend cần kiểm soát tường minh thời điểm effect chạy — không chỉ chạy gì, mà còn khi nào và ở đâu, biểu diễn qua temporal hook có thể compose
- •Hệ thống plugin muốn cung cấp cho người dùng các khối composable thay vì cấu hình mệnh lệnh
- •Thay thế async orchestration tự viết bằng primitive spatiotemporal có nguyên tắc — hữu ích khi team đã quen thuộc với khái niệm Effect-TS
Điểm mạnh
- ✓Mô hình composition mới lạ, đưa thời gian và không gian thành yếu tố tường minh trong kiến trúc plugin
- ✓Xây trên Effect-TS — nếu bạn đã dùng Effect, Cordis lắp vào ngay mà không cần học thêm mô hình concurrency riêng
- ✓Giấy phép MIT — không giới hạn dùng cho dự án thương mại hay mã nguồn mở
- ✓Phát triển tích cực — đội ngũ đang ra thay đổi thường xuyên
Hạn chế đã biết
- △API chưa ổn định — README cảnh báo breaking change có thể xảy ra không báo trước, một rủi ro thật cho production
- △Effect là dependency bắt buộc, không tùy chọn — bạn phải tiếp nhận cả Cordis lẫn toàn bộ mental model của Effect cùng lúc
- △Tài liệu còn mỏng — chỉ có một bài paper học thuật và một bản primer; khoảng cách giữa primer và ứng dụng thực tế còn khá lớn
- △Đường cong học tập dốc — spatiotemporal composability là khái niệm mới ngay cả với developer nhiều kinh nghiệm
- △README không nêu đơn vị nào đã dùng ở production hay ví dụ đã qua kiểm chứng thực tế — khoảng cách giữa lý thuyết và thực hành chưa được chứng minh
- △Tài nguyên FAQ hay hỗ trợ cộng đồng còn rất hạn chế
Lựa chọn thay thế Cordis
Câu hỏi thường gặp
Cordis dùng giấy phép MIT. Bạn có thể dùng tự do cho cả dự án thương mại lẫn mã nguồn mở.
Chưa. Theo README, API chưa đạt độ ổn định và có thể thay đổi mà không báo trước. Không nên dùng cho hệ thống production ở thời điểm hiện tại.
Đây là cách coi không gian và thời gian như những chiều có thể compose được trong chương trình. Thay vì chỉ compose module nào phụ thuộc vào module nào, bạn còn compose cả nơi code chạy và thời điểm nó kích hoạt.
Có. Cordis được xây trên nền Effect và re-export lại type cùng utility của thư viện này. Effect là dependency bắt buộc, không phải tùy chọn.
Dự án đang trong giai đoạn phát triển tích cực, đó cũng là lý do API chưa có cam kết ổn định. Xem lịch sử commit trên GitHub để biết nhịp độ phát triển hiện tại.
Hoàn toàn bằng TypeScript, cùng với type và utility của Effect-TS được re-export vì Cordis xây dựng trực tiếp trên nền thư viện Effect.
Nên dùng và nên bỏ qua khi nào
Chọn Cordis nếu bạn đã quen với Effect-TS và cần cách có nguyên tắc để compose plugin qua thời gian và các node. Mô hình spatiotemporal thực sự giải quyết các vấn đề điều phối vốn khó tự viết tay. Bỏ qua nếu bạn cần API ổn định, tài liệu đầy đủ, bằng chứng đã dùng ở production — hoặc nếu bản thân Effect còn là vùng đất mới với team bạn.
Repo liên quan
Vẫn đang phân vân về cordis?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về cordis.
