Сложный вопрос.
Clojure очень гибкий.
Так что это лучшие практики, но они не так важны, как для Java.
Я пишу здесь несколько примеров советов от самых общих до самых конкретных семейств.
Есть советы по программированию в целом:
написать много тестов, написать что-то правильное и красивое, профилировать и оптимизировать при необходимости
Есть советы по функциональному программированию:
писать небольшие функции, писать чистые функции, составлять небольшие функции, анализировать ваш код через функции, пытаться использовать комбинаторы, когда это возможно ...
Есть советы для LISP:
используйте макрос, чтобы выделить повторяющиеся шаблоны, создайте вашу программу снизу вверх. (Более подробное объяснение, чем у меня, см. В книге Пола Грэма о LISP)
Есть также несколько советов специально для Clojure:
следуйте тщательному анализу состояния и идентичности (http://clojure.org/state, для очень хорошего объяснения), старайтесь по возможности использовать seqs и их функции, пишите строки документов для функций
Хорошим источником дополнительных советов является стандарт кодирования библиотеки Clojure.
http://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards
Но все эти советы - просто советы, и Clojure может использовать тот, кто не хочет следовать этим советам, потому что, будучи Лиспом, он очень гибок.
Что касается шаблона проектирования, то функциональные программисты редко думают об этих терминах, так как большинство из них были разработаны для ОО-языков и не применяются на функциональном языке.
У Питера Норвига есть интересные слайды по шаблонам проектирования и LISP / Dylan:
http://norvig.com/design-patterns/
Надеюсь, это поможет.