Việc Vercel mới đây giới thiệu Workflow Devkit, một bộ công cụ mới được thiết kế để bổ sung tính bền vững và độ tin cậy cho các hàm TypeScript, đã châm ngòi cho một cuộc tranh luận sôi nổi trong cộng đồng nhà phát triển. Trọng tâm của cuộc tranh cãi là chỉ thị use workflow - một magic string (chuỗi ma thuật) biến các hàm thông thường thành các quy trình làm việc bền vững với khả năng tự động thử lại và duy trì trạng thái. Mặc dù hứa hẹn đơn giản hóa các thao tác bất đồng bộ phức tạp, cách tiếp cận này đã vấp phải chỉ trích vì sự phụ thuộc vào việc viết lại mã và nguy cơ ràng buộc nhà cung cấp.
Tranh Cãi Về Magic String
Cú pháp use workflow đại diện cho bước tiến mới nhất của Vercel vào lập trình dựa trên chỉ thị, tiếp nối các mô hình tương tự như use server và use client trong Next.js. Cách tiếp cận này sử dụng một khai báo chuỗi đơn giản ở đầu các hàm để kích hoạt các tính năng mạnh mẽ như thử lại tự động, duy trì trạng thái và khả năng quan sát. Tuy nhiên, nhiều nhà phát triển có kinh nghiệm đang phản đối điều mà họ cho là sự phụ thuộc quá mức vào các magic string làm lu mờ cách thức hoạt động thực sự của mã.
Trong tất cả các tùy chọn cú pháp mà họ có thể lựa chọn, họ lại chọn cái mà tôi cho là tệ nhất. Nếu bạn muốn một dòng mã, các decorator được sử dụng rộng rãi trên nhiều ngôn ngữ khác nhau và TypeScript cũng hỗ trợ chúng.
Cộng đồng đã đề xuất một số giải pháp thay thế, bao gồm decorator, hàm bậc cao hơn và hàm generator. Một số lập luận rằng decorator sẽ cung cấp một cách tiếp cận tiêu chuẩn hơn, trong khi những người khác đề xuất các trình bao bọc thử lại rõ ràng xung quanh từng lệnh gọi hàm. Mối quan ngại cốt lõi là các magic string làm cho hành vi của mã trở nên khó dự đoán hơn và khó gỡ lỗi hơn, đặc biệt là đối với các nhà phát triển cần hiểu chính xác mã của họ đang làm gì.
Các Phương Án Cú Pháp Thay Thế Do Cộng Đồng Đề Xuất:
- Decorators (@workflow) - Được chuẩn hóa hơn trên nhiều ngôn ngữ
- Higher-order functions - workflow(myFunction)
- Generator functions - Cách tiếp cận JavaScript thuần túy
- Explicit retry wrappers - retry(() => myFunction())
Triển Khai Kỹ Thuật Và Mối Lo Ngại Về Hệ Sinh Thái
Đằng sau hậu trường, use workflow dựa vào một plugin trình biên dịch SWC để viết lại mã trong quá trình xây dựng. Sự biến đổi này cho phép các tính năng như thực thi bền vững và thử lại tự động mà không cần nhà phát triển phải tự triển khai thủ công các quản lý trạng thái phức tạp. Hệ thống tự động nắm bắt trạng thái hàm, cho phép các quy trình làm việc tồn tại qua các lần khởi động lại máy chủ và tiếp tục từ nơi chúng dừng lại.
Tuy nhiên, cách tiếp cận này đã làm dấy lên lo ngại về sự ràng buộc framework và khả năng tương thích hệ sinh thái. Các bình luận nêu bật rằng việc triển khai hiện tại dường như được kết hợp chặt chẽ với Next.js và cơ sở hạ tầng của Vercel, với sự hỗ trợ hạn chế cho các framework khác. Một số nhà phát triển bày tỏ lo ngại về việc bị mắc kẹt trong hệ sinh thái của Vercel, lưu ý rằng chính mô hình kinh doanh giúp việc triển khai trở nên dễ dàng cũng tạo ra sự ràng buộc nhà cung cấp mạnh mẽ. Bản chất mã nguồn mở của dự án mang lại một số sự đảm bảo, nhưng vẫn còn những câu hỏi về việc các quy trình làm việc này có thể chạy bên ngoài nền tảng của Vercel dễ dàng như thế nào.
Hỗ trợ Framework hiện tại:
- Đã có: Next.js, NestJS
- Sắp ra mắt: Svelte, Remix, Astro, Qwik
- Yêu cầu: Plugin trình biên dịch SWC để chuyển đổi mã nguồn
So Sánh Với Các Giải Pháp Hiện Có
Workflow Devkit của Vercel bước vào một lĩnh vực vốn đã có sẵn một số giải pháp được thiết lập. Những người bình luận ngay lập tức so sánh nó với Temporal.io, Cloudflare Workflows và Azure's Durable Task Framework. Các hệ thống này giải quyết các vấn đề tương tự xung quanh việc thực thi bền vững và quản lý quy trình làm việc, nhưng sử dụng các phương pháp tiếp cận kỹ thuật khác nhau.
Ví dụ, Cloudflare Workflows sử dụng các lệnh gọi hàm rõ ràng như step.do và step.sleep thay vì viết lại mã. Một số nhà phát triển thích cách tiếp cận rõ ràng hơn này vì nó làm cho sự tham gia của công cụ quy trình làm việc trở nên rõ ràng trong mã. Temporal.io cung cấp một giải pháp trưởng thành với hỗ trợ cơ sở hạ tầng mạnh mẽ, mặc dù những người bình luận lưu ý rằng nó có thể phức tạp để thiết lập và quản lý. Sự xuất hiện của nhiều giải pháp trong lĩnh vực này cho thấy một sự công nhận ngày càng tăng rằng các phương pháp tiếp cận truyền thống để xử lý các quy trình chạy lâu dài cần được cải thiện.
Các Giải Pháp Workflow Thay Thế Được Cộng Đồng Đề Cập:
- Temporal.io: Nền tảng điều phối workflow trưởng thành
- Cloudflare Workflows: Sử dụng các hàm bước rõ ràng thay vì viết lại code
- Azure Durable Task Framework: Giải pháp của Microsoft cho các hàm bền vững
- DBOS: Cách tiếp cận hệ điều hành hướng cơ sở dữ liệu cho workflows
Ứng Dụng Thực Tế Và Trải Nghiệm Nhà Phát Triển
Bất chấp những tranh cãi, Workflow Devkit giải quyết các điểm đau thực sự trong việc phát triển ứng dụng hiện đại. Các ví dụ được trình bày trong thông báo cho thấy các trường hợp sử dụng thực tế như chuỗi email kéo dài nhiều ngày, quy trình làm việc của tác nhân AI và các quy trình kinh doanh phức tạp đòi hỏi tính bền vững xuyên suốt các lần khởi động lại và lỗi dịch vụ. Đối với các nhà phát triển xây dựng ứng dụng có các thao tác chạy lâu dài, cơ chế tự động duy trì trạng thái và thử lại có thể làm giảm đáng kể mã soạn sẵn.
Trải nghiệm phát triển dường như là một con dao hai lưỡi. Trong khi cách tiếp cận không cấu hình và các tính năng quan sát tự động thu hút các nhà phát triển muốn tập trung vào logic nghiệp vụ, thì cách tiếp cận bằng magic string lại khiến những người coi trọng tính minh bạch và khả năng gỡ lỗi lo ngại. Như một người bình luận đã lưu ý, khả năng nhấp chuột vào lệnh và xem lý do tại sao mọi thứ không hoạt động sẽ bị ảnh hưởng khi chức năng cốt lõi phụ thuộc vào việc chuyển đổi mã tại thời điểm xây dựng.
Tương Lai Của Lập Trình Dựa Trên Chỉ Thị
Cuộc tranh luận xung quanh use workflow phản ánh những căng thẳng rộng hơn trong hệ sinh thái JavaScript/TypeScript về cách cân bằng sự tiện lợi cho nhà phát triển với tính minh bạch của mã. Vercel dường như đang đặt cược mạnh mẽ vào lập trình dựa trên chỉ thị như là tương lai của phát triển web, xây dựng dựa trên kinh nghiệm của họ với các chỉ thị Next.js. Cách tiếp cận này ưu tiên trải nghiệm nhà phát triển và tạo mẫu nhanh hơn là kiểm soát và hiểu biết rõ ràng.
Khi công cụ trưởng thành, nhiều điều sẽ phụ thuộc vào cách Vercel giải quyết các mối quan tâm của cộng đồng về tính minh bạch, khả năng gỡ lỗi và tính di động. Sự hiện diện của một triển khai Postgres tham chiếu cho thấy công ty nhận thức được tầm quan trọng của việc tránh sự ràng buộc nhà cung cấp hoàn toàn. Tuy nhiên, những phản ứng mạnh mẽ từ các nhà phát triển có kinh nghiệm chỉ ra rằng cách tiếp cận hiện tại có thể cần được tinh chỉnh để giành được sự chấp nhận rộng rãi hơn ngoài đối tượng cốt lõi của Vercel.
Phản ứng của cộng đồng nhà phát triển đối với Workflow Devkit làm nổi bật các cuộc tranh luận đang diễn ra về sự trừu tượng so với tính minh bạch trong phát triển web hiện đại. Mặc dù công cụ này cung cấp các giải pháp hấp dẫn cho các vấn đề thực tế xung quanh việc thực thi bền vững, nhưng các lựa chọn triển khai của nó đã châm ngòi cho những cuộc trò chuyện quan trọng về hướng đi của các công cụ JavaScript và sự cân bằng giữa phép màu và tính rõ ràng trong thiết kế framework.
Tham khảo: Make any TypeScript Function Durable
