首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭合规范-命名实体关键字

闭合规范-命名实体关键字
EN

Stack Overflow用户
提问于 2018-11-13 10:58:10
回答 1查看 371关注 0票数 3

使用命名空间限定的关键字和不存在的命名空间来定义规范是否被认为是错误的做法?我希望在公共域命名空间中定义实体映射..。因此,为了避免在合并规范时丢失数据,我使用了常规:entity/attribute,而不是::entity-attribute,用于属性和实体的标准::entity。它与数据库表和列对齐得更好。单独命名空间中的每个实体都让我想起了Java类,听起来不是个好主意。

代码语言:javascript
复制
(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]))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 01:22:39

正如@glts所评论的,以下是正确的答案:邮寄名单

我决定让关键字更加具体,并将其添加到域命名空间中:

代码语言:javascript
复制
(doseq [ns ["entity-1" ,,, "entity-n"]]
  (->> (str "project.domain." ns)
       (symbol)
       (create-ns)
       (alias (symbol ns))))

然后::entity-n/attribute计算为:project.domain.entity-n/attribute

对于问题-示例中的属性,只需要一个额外的:

代码语言:javascript
复制
(s/def ::location/id ::nilable-nat-int)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53279505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档