I've been coding more of Cascade and I'm tending to do lots of small namespaces. I'm concerned about circular dependencies, so I've been using OmniGraffle to keep track of what uses what:
I end up keeping this open in the background and updating it manually as I add new namespaces or change dependencies. I'm pretty sure it's accurate.
It does raise the question ... am I using the correct level of granularity? I think I am, and the individual files are pretty short:
$ find src/main/clojure -name \*.clj | xargs wc -l 51 src/main/clojure/cascade/config.clj 115 src/main/clojure/cascade/dispatcher.clj 92 src/main/clojure/cascade/dom.clj 107 src/main/clojure/cascade/filter.clj 51 src/main/clojure/cascade/internal/parse_functions.clj 94 src/main/clojure/cascade/internal/parser.clj 205 src/main/clojure/cascade/internal/utils.clj 113 src/main/clojure/cascade/internal/viewbuilder.clj 36 src/main/clojure/cascade/jetty.clj 39 src/main/clojure/cascade/logging.clj 29 src/main/clojure/cascade/map_utils.clj 56 src/main/clojure/cascade/mock.clj 73 src/main/clojure/cascade/path_map.clj 41 src/main/clojure/cascade/pipeline.clj 30 src/main/clojure/cascade/urls.clj 81 src/main/clojure/cascade.clj 1213 total
... and that includes the ASL header comment in each file. Short and sweet.
Maintaining this chart seems like something I should automate at some point, however: It should be possible to use the reader to parse a Clojure source file without evaluating it; the first form should be the (ns), from which can be expanded the used and required namespaces (with a bit of effort, because of Clojure's very concise syntax). One more project for the back burner ...
No comments:
Post a Comment