だから、私はClojure.Specをどんどん深く掘り下げています。
私がつまずいたのは、スペックをどこに置くかということです。次の 3 つのオプションが表示されます。
グローバル スペック ファイル
私がオンラインで見つけたほとんどの例ではspec.clj
、メインの名前空間で必要になる大きなファイルが 1 つあります。すべての「データ型」と機能のすべてと機能を備えています(s/def)
。(s/fdef)
プロ:
- すべてを支配する 1 つのファイル
反対:
- このファイルは大きくなる可能性があります
- 単一責任の原則に違反していますか?
プロダクション名前空間の仕様
(s/def)
and(s/fdef)
を本番コードのすぐ隣に置くことができます。そのため、実装と仕様は同じ名前空間に共存します。
プロ:
- 実装と仕様のコロケーション
- 1 つの名前空間 - 1 つの懸念事項?
反対:
- 本番コードが乱雑になる可能性があります
- 1 つの名前空間 - 2 つの懸念事項?
専用スペック名前空間構造
次に、仕様は第 3 の種類のコード (本番とテストの次に) ではないかと考えました。したがって、次のような名前空間の独自の構造に値する可能性があります。
├─ src
│ └─ package
│ ├─ a.clj
│ └─ b.clj
├─ test
│ └─ package
│ ├─ a_test.clj
│ └─ b_test.clj
└─ spec
└─ package
├─ a_spec.clj
└─ b_spec.clj
プロ:
- 仕様専用の (しかし関連する) 名前空間
反対:
- 正しい名前空間を調達して要求する必要があります
アプローチの1つを経験したのは誰ですか?
別のオプションはありますか?
さまざまなオプションについてどう思いますか?