Namespaces and Project Structure
File layout: namespace myapp.order-items → file src/myapp/order_items.clj (dots become directories, hyphens become underscores).
.clj (JVM), .cljs (ClojureScript), .cljc (shared, with reader conditionals), .edn (data).
;; src/myapp/orders.clj
(ns myapp.orders
"Order processing functions."
(:require [clojure.string :as str]
[clojure.set :refer [union]]
[myapp.db :as db])
(:import (java.time LocalDate Instant)
(java.util UUID)))
(defn new-order [items]
{:id (UUID/randomUUID)
:created (Instant/now)
:items items})
(defn- validate [order] (seq (:items order))) ; private;; At the REPL
(require '[myapp.orders :as orders] :reload) ; reload after edits
(in-ns 'myapp.orders) ; switch namespaces
(ns-publics 'myapp.orders)
(ns-unmap *ns* 'some-var) ; remove a var
(resolve 'orders/new-order)