Я был вдохновлен купить эту книгу: Построение эволюционных архитектур и чистой архитектуры .
Одна из концепций состоит в том, чтобы иметь возможность проверить свою архитектуру вкод.В частности, я хотел бы иметь возможность проверять зависимости между пространствами имен, слоями и утверждать, что пространство имен не вызывает пространство имен для другого слоя.
Все мои пространства имен находятся внутри окружностей:
Идея состоит в том, что пространство имен внутри «контроллеров» не может импортировать пространство имен внутри «сущностей», а только импортировать пространства имен под ним (варианты использования).И я хотел бы обнаружить это в моих модульных тестах.
Так что это должно провалиться в моих модульных тестах:
(ns com.controller.core
(:require [com.entities.core :as entities]
[com.use-cases.core :as use-cases]))
(defn do-something [args]
(let [use-cases-results (use-cases/do-something args)]
(entities/do-some-other-thing use-cases-results)))
В java вы можете писать подобные тесты, используя archunit .
private final JavaClasses classes = new ClassFileImporter().importPackagesOf(Controller/core.class);
noClasses().that().resideInAPackage("..controller..").should().accessClassesThat().resideInAPackage("..use-cases..").check(classes);
Используете ли вы что-то похожее для clojure или у вас есть предложения, как решить эту проблему?