Итак, я погружаюсь глубже и глубже в Clojure.Spec.
Одна вещь, на которую я наткнулся, - , где можно поместить мои спецификации. Я вижу три варианта:
Глобальный файл спецификаций
В большинстве примеров, я нашел онлайн, есть один большой файл spec.clj
, который требуется в основном пространстве имен. Он имеет все (s/def)
и (s/fdef)
для всех "типов данных" и функций.
Pro:
- Один файл для управления всеми ними
Contra:
- Этот файл может быть большим
- Нарушен принцип одиночной ответственности.
Спецификации в производственных пространствах имен
Вы можете поместить свои (s/def)
и (s/fdef)
рядом с вашим производственным кодом. Таким образом, реализация и спецификация сосуществуют в одном пространстве имен.
Pro:
- совместное расположение реализации и спецификации
- одно пространство имен - одна проблема?
Contra:
- производственный код может стать беспорядочным
- одно пространство имен - две проблемы?
Структура пространства имен выделенной структуры
Тогда я подумал, может быть, Specs - это третий вид кода (рядом с производством и тестом). Поэтому, возможно, они заслуживают собственной структуры пространств имен, например:
├─ src
│ └─ package
│ ├─ a.clj
│ └─ b.clj
├─ test
│ └─ package
│ ├─ a_test.clj
│ └─ b_test.clj
└─ spec
└─ package
├─ a_spec.clj
└─ b_spec.clj
Pro:
- выделенные (но связанные) пространства имен для спецификаций
Contra:
- вам необходимо указать и потребовать правильные пространства имен
Кто имеет опыт работы с одним из подходов?
Есть ли другой вариант?
Что вы думаете о разных вариантах?