Pregunta difícil.
Clojure es muy flexible. Por lo tanto, son las mejores prácticas, pero no son tan importantes como para Java.
Escribo aquí algunos ejemplos de consejos de las familias más generales a las más particulares.
Hay consejos para la programación en general: escribir un montón de pruebas, escribir algo correcto y agradable, el perfil y optimizar cuando sea necesario
Hay consejos para la programación funcional: escribir funciones pequeñas, escribir funciones puras, componga las funciones pequeñas, factorice su código a través de las funciones, intente usar combinadores cuando sea posible ...
Hay consejos para LISP: utilice macro para factorizar patrones repetitivos, construya su programa de abajo hacia arriba. (Véase Paul Graham 'en LISP' para una explicación mejor que la mía)
También hay algunos consejos específicamente para Clojure: siguen el análisis cuidadoso de estado e identidad (http://clojure.org/state, para una explicación muy buena), trata de usar SEQs y sus funciones cuando sea posible, escribir cadenas de documentación para las funciones
una buena fuente para más consejos son la Biblioteca Clojure codificación estándar http://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards
Pero todos estos consejos son sólo consejos, y Clojure puede ser utilizado por alguien que no quiero seguir estos consejos, porque, como un Lisp, es muy fle Xible.
En lo que respecta al patrón de diseño, el programador funcional rara vez piensa en estos términos, ya que la mayoría de ellos se han diseñado para lenguajes OO y no se aplican en un lenguaje funcional.
Peter Norvig tiene toboganes interesantes sobre patrones de diseño y LISP/Dylan: http://norvig.com/design-patterns/
Espero que ayude.
Evite el estado * mutable *. – Jeremy