Ответ 1
-
Я думаю, это нормально, если вы думаете, что это помогает, но многие проекты Clojure этого не делают - ср. Compojure (используя компоновку верхнего уровня и различные компоненты. * Ns для определенной функциональности), Ring, Leiningen... Clojure сам использует clojure. * (И clojure.contrib. * Для вкладчиков), но я полагаю, что это особый случай.
-
Да! Вы абсолютно должны это сделать, иначе Clojure не сможет найти ваши пространства имен. Также обратите внимание, что вы не используете символ подчеркивания в именах имен или дефис в именах файлов и везде, где вы используете дефис в имени пространства имен, вы должны использовать знак подчеркивания в имени файла (так что ns
my.cool-project
определяется в файле называетсяcool_project.clj
в каталоге с именемmy
). -
Вам нужно убедиться, что все ваши вещи находятся в пути к классам, но неважно, если это в банке, несколько банок, смесь банок и каталогов в файловой системе... Пока это подчиняется правильным соглашениям об именах (ваш пункт № 2), вы должны быть в порядке.
Однако не компилируйте вещи досрочно, если нет особых оснований для этого - это может помешать переносу вашего кода в разных версиях Clojure без каких-либо преимуществ, кроме немного улучшенного времени загрузки.
Вам все равно придется иногда использовать компиляцию AOT, особенно в некоторых сценариях взаимодействия Java - документация соответствующих функций/макросов всегда упоминает об этом. Есть примеры вещей, требующих AOT в clojure.contrib; Я никогда не нуждался в этом, поэтому я не могу предоставить много деталей.
-
Я бы сказал, что вы должны использовать банки для функциональных блоков кода. Например. Compojure и Ring получают в виде отдельных банок, содержащих множество пространств имен, которые вместе составляют весь пакет. Кроме того, clojure.contrib особенно упакован как одна банка с несколькими несвязанными библиотеками; но это снова может быть особым случаем.
С другой стороны, единая банка, содержащая весь код проекта вместе со своими зависимостями, иногда может быть полезна для развертывания. Проверьте инструмент создания Leiningen и его объект uberjar, если вы считаете, что это может быть полезно для вас.