- vừa được xem lúc

Từ “mì Ý” đến các thành phần hiện đại: Chúng ta đã rút ra được bài học gì chưa?

0 0 1

Người đăng: mâyxám

Theo Viblo Asia

Từ “mì Ý” đến các thành phần hiện đại: Chúng ta đã rút ra được bài học gì chưa?

Vào thời kỳ Dotcom, HTML, JavaScript, CSS và logic phía máy chủ thường bị trộn lẫn vào nhau, tạo nên vô số “cơn ác mộng” bảo trì. Khi đó, các mô hình như ASP, JSP gần như đã trở thành đồng nghĩa với thuật ngữ “code spaghetti” — mã như một đống mì Ý, rối rắm và khó kiểm soát.

Ngày nay, các framework hiện đại như React, Vue, Yew có vẻ đã mang đến khái niệm “component hóa” tiên tiến, tuy nhiên chúng cũng đang tái hiện lại việc trộn lẫn giữa giao diện, trạng thái và logic nghiệp vụ ở một cấp độ khác.

Vậy thì câu hỏi là: Chúng ta thực sự đã giải quyết được những vấn đề lịch sử đó, hay chỉ đang “bình cũ rượu mới”?

Vấn đề không nằm ở hình thức có giống hay không, mà là sự “hợp nhất” này là một bước lùi hay là sự tiến hóa tiếp theo của kỹ thuật phần mềm hiện đại?


Thực hành full-stack với Rust: Chúng ta đang ở giai đoạn nào?

Rust đang dần trở thành một “làn gió mới” đáng chú ý trong phát triển Web hiện nay. Với đặc điểm an toàn bộ nhớ, hiệu suất cao, thân thiện với đa luồng, Rust có một hệ sinh thái backend khá trưởng thành với các framework như actix-web, Diesel đã có thể xây dựng dịch vụ ở cấp độ sản xuất.

Về phía frontend, Rust đang thử nghiệm bước tiến full-stack qua WebAssembly (Wasm) và framework Yew.

Một bài viết thực nghiệm xây dựng ứng dụng Web full-stack bằng Rust cho thấy tác giả dùng actix-web kết hợp với Yew để tạo nên một hệ thống hoàn chỉnh. Với Rust ở phía backend:

  • actix-web hỗ trợ đa luồng, TLS/HTTP2,
  • Diesel ORM và quản lý kết nối PostgreSQL hoạt động hiệu quả,
  • Kết hợp cùng Docker giúp quá trình build & triển khai dễ dàng, linh hoạt hơn.

Tuy nhiên, về frontend, hệ sinh thái vẫn còn đang phát triển. Framework Yew cho phép viết frontend bằng Rust thông qua macro html!{}, loại bỏ hoàn toàn sự phụ thuộc vào JS.

Họ cũng áp dụng WebSocket kết hợp với Cap’n Proto để xây dựng kết nối realtime. Dù kiến trúc tổng thể khá rõ ràng, Yew vẫn thiếu công cụ test thành phần (component testing), test đầu-cuối (E2E) và debug vẫn khá thủ công.


Hợp nhất Frontend và Backend – nhưng cái giá là gì?

Một bước đi táo bạo khác mà bài viết đề cập là hợp nhất toàn bộ code frontend/backend trong một repository duy nhất, sử dụng Makefile và Docker để tự động hóa toàn bộ quy trình build & deploy.

Mặc dù cách làm này giúp giảm nguy cơ phân mảnh giao diện API, nhưng:

  • Mức độ tái sử dụng thực tế giữa frontend/backend vẫn thấp,
  • Chi phí bảo trì lại tăng,
  • Phụ thuộc lớn vào kỹ năng DevOps và tổ chức nhóm.

Tác giả kết luận: Full-stack Rust rất tiềm năng, nhưng cần hệ sinh thái và công cụ mạnh mẽ hơn để có thể áp dụng đại trà.


Hệ sinh thái frontend của Rust còn đang thử nghiệm

Yew là framework nổi bật nhất của Rust ở phía frontend, lấy cảm hứng từ Elm và React:

  • Hỗ trợ component hóa,
  • Agent để chia sẻ state,
  • Viết HTML bằng macro html!{} hoàn toàn bằng Rust.

Nhưng điều này cũng kéo theo các thách thức mới:

  • Thiếu công cụ kiểm thử thành phần và đầu-cuối,
  • Cap’n Proto bị hạn chế khi build với WebAssembly,
  • wasm32-unknown-unknown là mục tiêu build khá chuẩn, nhưng trong thực tế phải đánh đổi về trải nghiệm và công cụ hỗ trợ.

Viết frontend bằng Rust rất "cool", nhưng để triển khai trong môi trường sản xuất thì vẫn còn nhiều rào cản.


“Môi trường phát triển địa phương” vẫn là rào cản lớn

Một trong những điểm nghẽn bị bỏ quên từ lâu là ** việc cấu hình môi trường phát triển cục bộ**. Việc cài đặt rustup, cấu hình cargo, điều chỉnh biến môi trường PATH,… luôn khiến người mới nản lòng.

Và đó là lý do vì sao nền tảng tích hợp hiện đại ServBay trở nên rất quan trọng.

ServBay đã tích hợp sẵn môi trường Rust – giúp lập trình viên không cần cài đặt thủ công, mà chỉ cần một cú nhấp chuột là có môi trường biên dịch, chạy thử độc lập và tối ưu.

Không chỉ Rust, ServBay còn hỗ trợ Node.js, PHP, MariaDB, PostgreSQL,… giúp quản lý đa ngôn ngữ & đa dịch vụ trong một công cụ duy nhất. Điều này nâng cao hiệu suất làm việc và đưa chúng ta đến gần hơn mục tiêu “phát triển đa ngôn ngữ hợp tác”.


Hợp nhất không có nghĩa là thụt lùi – mà là cách tổ chức lại

Xung quanh React và Yew – cộng đồng vẫn đang tranh cãi về việc "trộn mã":

  • Một bên cho rằng hợp nhất giao diện, logic và trạng thái là bước lùi về thời kỳ ASP – phá vỡ phân tách mối quan tâm, tăng độ phức tạp,
  • Một bên khác lại cho rằng việc gộp trong phạm vi có kiểm soát mang lại hiệu quả phát triển cao hơn.

Miễn là chúng ta có thiết kế thành phần tốt, việc tổ chức lại code theo cách này giúp giảm thiểu chuyển ngữ cảnh, tăng sự tập trung và dễ duy trì.

Yew cũng tương tự: macro và template ban đầu có thể khó hiểu, nhưng về dài hạn lại giúp tổ chức dự án Rust một cách sạch sẽ.


Tạm kết:Lịch sử là tấm gương, không phải xiềng xích

Chúng ta không lặp lại quá khứ – mà đang tái cấu trúc các mô hình cũ với công cụ mới.

Chỉ cần bạn biết khi nào nên chia tách, khi nào nên hợp nhất, thì React hay Yew đều có thể trở thành công cụ mạnh mẽ.

Chúng ta nên tỉnh táo trước “mã spaghetti” tái sinh dưới vỏ bọc mới — nhưng cũng đừng vì sợ hãi mà bỏ lỡ những tiến bộ kỹ thuật.

Bởi vì: Hợp nhất không phải là vấn đề – vấn đề nằm ở cách tổ chức.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thủ thuật nhỏ để căn chỉnh image với object-fit

Chào các bạn,. Có lẽ trong hành trình code của các bạn thì không ít lần gặp vấn đề méo ảnh do fix cứng cả width, height của ảnh nhỉ? Hoặc kể cả khi bạn set value cho 1 thuộc tính weigth hoặc height còn thuộc tính còn lại để auto thì nhiều lúc ảnh cũng không được hiển thị toàn vẹn cho lắm.

0 0 62

- vừa được xem lúc

Tìm hiểu về CSS framework - Bulma

Mở đầu:. Mấy bữa nay đang lướt web thấy có giới thiệu framework bulma này, được mọi người giới thiệu gọn nhẹ và dễ sử dụng, nên mình mới tìm hiểu thử và hôm nay xin viết 1 bài viết giới thiệu sơ qua với các bạn.

0 0 46

- vừa được xem lúc

Một số mẹo vặt "hay ho" của ES6 có thể bạn chưa biết - Phần 4

Xin chào, ở 3 bài trước của series "Một số mẹo vặt "hay ho" của ES6", mình đã chia sẻ 1 số tips/tricks nhỏ với ES6, hy vọng ít nhiều nó sẽ có ích với các bạn khi áp dụng vào thực tế. Hôm nay, xin mời các bạn theo dõi phần 4 của series này.

0 0 57

- vừa được xem lúc

Tìm hiểu về Jest Mocks Test phía frontend

Giới thiệu. Chắc hẳn không ai phủ nhận rằng UnitTest là 1 phần quan trọng trong giai đoạn phát triển phần mềm, đảm bảo cho code được coverage tránh các bug không mong muốn.

0 0 47

- vừa được xem lúc

Convert từ SVG sang Icon Font như thế nào?

Chào các bạn. Như câu hỏi trên title của bài viết, hôm nay mình sẽ hướng dẫn các bạn cách convert 1 file svg 1 cách khá đơn giản và vô cùng tiện lợi cho các bạn. https://icomoon.io/app/#/select.

0 0 70

- vừa được xem lúc

Một vài thủ thuật làm việc với các dạng layout - Phần 4

. Chào mọi người, cũng đã lâu rồi mình không thấy nhau. Để tiếp tục với series's về các dạng layout hôm nay mình sẽ chia sẻ thêm một trick thú vị nữa về step layout.

0 0 55