Biff.graph: Một lớp truy vấn đồ thị nhẹ cho Clojure
Biff.graph là một thư viện ~600 dòng cho phép bạn truy vấn cơ sở dữ liệu và dữ liệu dẫn xuất như một đồ thị thống nhất, lấy cảm hứng từ Pathom nhưng được thiết kế dễ hiểu và dễ gỡ lỗi hơn.

Biff.graph là một thư viện mới từ framework web Clojure Biff, cung cấp một lớp mô hình hóa dữ liệu dạng đồ thị nhẹ. Nó cho phép bạn cấu trúc mô hình dữ liệu của mình thành một đồ thị có thể truy vấn, kết hợp truy cập cơ sở dữ liệu và logic kinh doanh/dẫn xuất vào một giao diện thống nhất duy nhất.
Thư viện này về cơ bản là một phiên bản đơn giản hóa của Pathom, nhưng với diện tích nhỏ hơn nhiều — tổng cộng khoảng 600 dòng mã, trong đó engine thực thi truy vấn chỉ có 200 dòng. Sự đánh đổi chính: biff.graph bỏ qua bước lập kế hoạch truy vấn mà Pathom sử dụng, điều này có nghĩa là một số truy vấn có thể kém hiệu quả hơn, nhưng codebase dễ tiếp cận hơn nhiều đối với các nhà phát triển không cần toàn bộ sức mạnh của Pathom.
Cách hoạt động
Biff.graph sử dụng một tập con của EQL và các mẫu pull của Datomic để mô tả hình dạng dữ liệu. Bạn định nghĩa các "resolver" — các hàm nhỏ, độc lập, mỗi hàm xử lý một phần dữ liệu cụ thể. Mỗi resolver có một truy vấn đầu vào và một truy vấn đầu ra. Engine truy vấn của thư viện sau đó xâu chuỗi các resolver này lại với nhau để trả về dữ liệu theo bất kỳ hình dạng nào bạn yêu cầu.
Ví dụ, bạn có thể định nghĩa một resolver lấy một bài đăng blog từ cơ sở dữ liệu, và một resolver khác dọn dẹp tiêu đề bài đăng bằng cách loại bỏ biểu tượng cảm xúc. Khi bạn truy vấn một bài đăng với tiêu đề sạch, biff.graph tự động gọi cả hai resolver và kết hợp kết quả.
Các quyết định thiết kế chính
Thư viện hỗ trợ batch resolver và caching, giúp giảm thiểu việc thiếu lập kế hoạch truy vấn. Tác giả, Jacob O'Bryant, đã tạo ra biff.graph vì ông yêu thích sử dụng Pathom nhưng lo ngại nó quá phức tạp đối với đối tượng mục tiêu của Biff — các nhà phát triển làm việc trên các dự án nhỏ hơn, những người có thể không quen với các mẫu mô hình hóa dữ liệu đồ thị.
Biff.graph hiện đang ở trạng thái ứng viên phát hành (phiên bản 2.0.0-rc7) và sẽ duy trì trạng thái này cho đến khi tất cả các thư viện Biff 2 khác được phát hành. Không có thay đổi phá vỡ nào được dự đoán.
Sử dụng thực tế
Mẫu được khuyến nghị là tự động tạo một resolver cho mỗi bảng cơ sở dữ liệu, với đầu vào là khóa chính và đầu ra bao gồm tất cả các cột cộng với các khóa nối cho khóa ngoại. Các resolver bổ sung cho dữ liệu dẫn xuất có thể được thêm dần khi cần. Thư viện tích hợp với biff.fx để sử dụng trong các trình xử lý yêu cầu Ring.
Việc gỡ lỗi được xử lý thông qua dữ liệu ngoại lệ bao gồm khóa :biff.graph/trace, hiển thị chính xác vị trí xảy ra lỗi trong quá trình duyệt đồ thị. Việc kiểm tra resolver rất đơn giản — chúng được lưu trữ dưới :biff.graph/resolve-fn và nhận một map ngữ cảnh duy nhất với đầu vào dưới :biff.graph/input.
Thảo luận
0 bình luận
Hãy là người đầu tiên thảo luận.