Nói rằng tôi có thông số kỹ thuật sau:Sử dụng Clojure Spec với các đơn vị Datomic
(s/def :person/age number?)
(s/def :person/name string?)
(s/def ::person (s/keys :req [:person/name :person/age]))
Sau đó, tôi lấy một thực thể từ Datomic:
(def person-entity (d/entity (d/db conn) [:person/name "Mr entity"]))
Nếu tôi cố gắng để kiểm tra sự phù hợp với spec nó không thành công vì thực thể không phải là bản đồ:
(s/explain ::person person-entity)
val: #:db{:id 17592186069950} fails spec: :some-ns/person predicate: map?
Ứng dụng của tôi có chức năng lấy thực thể làm đối số và muốn void phải sửa đổi các thực thể để bản đồ ở khắp mọi nơi chỉ để có được thiết bị cụ thể để làm việc trong phát triển.
Tôi nên làm cách nào để xác thực các thực thể thông qua thông số kỹ thuật?
Câu hỏi hay. Sau khi bạn tìm thấy một giải pháp cho vấn đề này, bạn sẽ không gặp phải vấn đề với không gian tên? Bản đồ thực thể sẽ là một cái gì đó như: '{: person/name" Mr. Entity "}', mà _not_ xác nhận đối với '(s/keys: req [:: name :: age])' trừ khi những định nghĩa đó xảy ra trong '(ns person)'. Nhưng điều đó buộc bạn phải xác định một loạt các không gian tên gói cấp cao nhất, điều này dường như không hợp lý. – Marc
Cảm ơn @Marc, tôi đã cập nhật ví dụ. – Odinodin