【发布时间】:2016-10-22 21:18:52
【问题描述】:
所以,我对 Clojure.Spec 的研究越来越深入。
我偶然发现的一件事是,将我的规格放在哪里。我看到三个选项:
全局规范文件
在大多数示例中,我在网上找到了一个大的spec.clj 文件,它在主命名空间中是必需的。它包含所有“数据类型”和函数的所有(s/def) 和(s/fdef)。
亲:
- 一个文件统统统管
反对:
- 这个文件可能很大
- 违反单一责任原则?
生产命名空间中的规范
您可以将(s/def) 和(s/fdef) 放在您的生产代码旁边。因此,实现和规范共存于同一个命名空间中。
专业版:
- 实施和规范的共同定位
- 一个命名空间 - 一个问题?
反对:
- 生产代码可能会变得混乱
- 一个命名空间 - 两个问题?
专用规范命名空间结构
然后我想,也许 Specs 是第三种代码(仅次于生产和测试)。所以也许他们应该拥有自己的命名空间结构,就像这样:
├─ src
│ └─ package
│ ├─ a.clj
│ └─ b.clj
├─ test
│ └─ package
│ ├─ a_test.clj
│ └─ b_test.clj
└─ spec
└─ package
├─ a_spec.clj
└─ b_spec.clj
专业版:
- 规范的专用(但相关)命名空间
反对:
- 您必须获取并要求正确的命名空间
谁对其中一种方法有经验?
还有其他选择吗?
您如何看待不同的选择?
【问题讨论】:
标签: clojure clojure.spec