Backbone.js: framework MVC nhẹ cho ứng dụng JS
Backbone.js là thư viện chứng minh một ứng dụng trình duyệt có thể có Models, Views và Collections thay vì một đống callback jQuery, và với codebase đã chạy nó, Backbone.js vẫn làm tốt đúng việc đó. Bắt đầu dự án hoàn toàn mới bằng Backbone.js giờ khó biện minh hơn: framework mới đóng gói sẵn binding hai chiều và component templating mà Backbone.js để bạn tự viết tay, nên xem nó là công cụ bảo trì, không phải lựa chọn mặc định cho dự án mới.
Backbone.js là gì?
Backbone.js là một thư viện JavaScript mang lại cấu trúc cho ứng dụng trình duyệt thông qua Models với key-value binding và custom events, Collections cung cấp một API enumerable phong phú, và Views xử lý DOM events theo kiểu khai báo (declarative). Backbone.js kết nối tất cả phần đó với server qua một RESTful JSON interface, và khởi đầu là lớp JavaScript mã nguồn mở đứng sau DocumentCloud.
Tính năng cốt lõi: Models, Views, Collections và Events
- ✓Models mang key-value binding và bắn custom event mỗi khi một giá trị thay đổi, để các phần khác của ứng dụng phản ứng lại mà không cần polling.
- ✓Collections gom các Models thành tập có thứ tự với, theo lời README, một API enumerable phong phú để filter, sort và lặp qua phần tử.
- ✓Views gắn DOM event theo kiểu khai báo (declarative) thay vì gọi addEventListener thủ công rải rác trong code.
- ✓Một RESTful JSON interface đồng bộ Models và Collections với backend, ánh xạ create/read/update/delete thẳng vào các HTTP verb chuẩn.
- ✓Bắt đầu là lớp JavaScript mã nguồn mở đứng sau DocumentCloud, nên các ý tưởng cốt lõi đã được kiểm chứng trong một ứng dụng production thật trước.
- ✓README chỉ nêu đúng bốn khối xây dựng: Models, Views, Collections, Events. Không nhắc tới router hay template engine đi kèm.
Điểm mạnh
- ✓License MIT: được dùng, sửa và ship miễn phí trong sản phẩm thương mại, không phải trả royalty.
- ✓Bắt đầu từ production thật ở DocumentCloud, không phải một dự án demo giả định.
- ✓Bề mặt khái niệm nhỏ: README chỉ nêu đúng bốn khối xây dựng, Models, Views, Collections, Events, nên ít thứ phải học hơn một framework đầy đủ.
- ✓Đã có sẵn CODE_OF_CONDUCT.md và SECURITY.md, tức là governance kỹ hơn phần lớn thư viện JavaScript nhỏ khác.
Hạn chế của Backbone.js
- △README của chính repo không có install command, đoạn code quick-start hay ví dụ nào; mọi thứ thực dụng đều đẩy sang https://backbonejs.org.
- △Support nằm rải rác ở ba kênh bên ngoài (tag Stack Overflow, phòng Matrix/Gitter, và Google Group) thay vì tập trung ở một nơi như GitHub Discussions.
- △Không có changelog. Cũng không có dependency list hay version number hiện tại, nên chỉ nhìn trang repo thì không biết mình đang thêm gì vào project.
Lựa chọn thay thế cho Backbone.js
Câu hỏi thường gặp
Dữ liệu GitHub được cung cấp ở đây không có ngày commit gần nhất hay lịch sử release, nên không thể xác nhận tình trạng maintain hiện tại của Backbone.js chỉ từ dữ liệu này. Hãy kiểm tra trực tiếp lịch sử commit và trang release trên GitHub trước khi dùng cho một dự án mới.
Backbone.js được dùng để thêm cấu trúc cho ứng dụng trình duyệt nặng JavaScript: Models giữ dữ liệu với key-value binding và custom event, Collections gom Models lại với một API enumerable, còn Views xử lý DOM event theo kiểu khai báo, tất cả đồng bộ với server qua một RESTful JSON interface, pattern đứng sau nhiều single-page application đời đầu.
Mô tả repo và README được cung cấp ở đây không liệt kê trực tiếp dependency của Backbone.js. Để biết danh sách dependency hiện tại, link tải và chi tiết setup, README trỏ người đọc tới https://backbonejs.org, nơi được nêu là nguồn cho docs, license, test và bản tải sẵn đóng gói.
Backbone.js được phát hành theo license MIT, một license mã nguồn mở permissive cho phép dùng, sửa và phân phối lại miễn phí trong dự án thương mại mà không phải trả royalty. Bạn có thể ship sản phẩm dùng Backbone.js cho mục đích thương mại miễn là giữ nguyên license và copyright notice gốc.
Backbone.js đưa cho bạn bốn khối nguyên liệu thô, Models, Views, Collections, Events, và để bạn tự nối chúng lại, không có sẵn component system hay virtual DOM. Angular và React opinionated hơn: chúng đóng gói sẵn templating hoặc component model, nên một dự án mới thường chọn một trong hai thay vì tự dựng cấu trúc đó bằng Backbone.js.
Backbone.js theo pattern MV*, một biến thể lỏng của MVC: Models giữ dữ liệu và bắn custom event khi dữ liệu thay đổi, Collections là tập Models có thứ tự với một API enumerable, còn Views lắng nghe các event đó để cập nhật DOM và xử lý DOM event theo kiểu khai báo, giữ logic dữ liệu và hiển thị tách biệt thay vì trộn lẫn.
Vấn đề mà nó giải quyết
Trước Backbone.js, một ứng dụng nặng JavaScript thường có nghĩa là state nằm rải rác trong DOM attribute và một loạt event handler jQuery, không object nào thực sự sở hữu một phần dữ liệu hay báo hiệu khi dữ liệu đó thay đổi. Mô tả của chính Backbone.js đưa ra hướng giải quyết: Models với key-value binding và custom events, cộng với Collections và Views thao tác trên dữ liệu đó thay vì đụng thẳng vào DOM, cùng một RESTful JSON interface nối client với server thay vì các lệnh gọi AJAX viết tay rải khắp handler.
Trường hợp sử dụng tốt nhất
- •Thêm cấu trúc Models/Collections/Views vào một admin panel đang dùng nhiều jQuery mà không cần viết lại toàn bộ.
- •Xây một single-page application nhỏ nói chuyện với REST JSON backend và cần Models luôn đồng bộ với backend đó.
- •Bảo trì hoặc mở rộng một codebase Backbone.js cũ đang chạy production thay vì migrate toàn bộ sang công nghệ khác.
- •Học pattern MV* của JavaScript trực tiếp qua thực hành trước khi chuyển sang framework nặng hơn như Vue hay Angular.
Cách cài đặt / dùng thử
Dữ liệu GitHub được cung cấp ở đây không có install command hay đoạn code mẫu nào. Hướng dẫn setup duy nhất trong README là một đường link: "For Docs, License, Tests, pre-packed downloads, and everything else, really, see: https://backbonejs.org." Vậy nên đường cài đặt cụ thể (tên package npm, version hiện tại, hay tải qua script tag) không được ghi rõ trong chính README của repo này; hướng dẫn thật sự nằm ở backbonejs.org.
Cách sử dụng
Cách sử dụng cũng không được ghi rõ trong dữ liệu được cung cấp, vì README không có ví dụ code hay quick-start nào. README trỏ developer tới https://backbonejs.org để xem tài liệu thật, và tới tag Stack Overflow của backbone.js, phòng Matrix/Gitter, hoặc Google Group để hỏi về cách làm việc với Backbone.js.
Nên dùng khi nào — và khi nào nên bỏ qua
Backbone.js hợp với một team đang bảo trì codebase Backbone.js sẵn có, admin tool cũ hay dashboard SaaS đời trước, cần thêm tính năng mà không viết lại từ đầu, hoặc một developer muốn hiểu pattern MV* (Models, Collections, Views, Events) trước khi học một framework nặng hơn. Nó không hợp với một dự án hoàn toàn mới không có sẵn code jQuery/Backbone.js: lúc đó Vue, Angular hay React cho bạn component model và templating sẵn có mà không phải tự nối tay như Backbone.js. Nếu routing, two-way binding, hay CLI scaffold là thứ bạn cần và chúng không nằm trong mô tả repo này, hãy tính thời gian tự thêm vào hoặc chọn một framework đã có sẵn những thứ đó.
backbone có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về backbone.
