使用不带名称空间的名称空间限定关键字来定义规范是否被认为是不好的做法?我想在通用的 domain 命名空间中定义实体映射...为了避免在合并规格时丢失数据,我使用了约定:entity/attribute
而不是::entity-attribute
属性和实体的标准::entity
。它与数据库表和列更好地对齐。单独的命名空间中的每个实体使我想起Java类,听起来并不好。
(s/def :country/id ::nilable-nat-int)
(s/def :country/name ::non-empty-string)
(s/def ::country
(s/keys :req [:country/id
:country/name]))
;; ----------------------------------------
(s/def :location/id ::nilable-nat-int)
(s/def :location/name ::non-empty-string)
(s/def :location/zipcode ::nilable-non-empty-string)
(s/def ::location
(s/merge
(s/keys :req [:location/id
:location/name
:location/zipcode])
(s/or :country ::country
:country-id
(s/keys :req [:country/id]))))
答案 0 :(得分:0)
正如@glts所评论的那样,这是正确的答案:mailing list。
我决定使关键字更具体,将其添加到域名称空间:
(doseq [ns ["entity-1" ,,, "entity-n"]]
(->> (str "project.domain." ns)
(symbol)
(create-ns)
(alias (symbol ns))))
然后::entity-n/attribute
的值为:project.domain.entity-n/attribute
。
问题示例中的属性仅需要一个附加的:
:
(s/def ::location/id ::nilable-nat-int)