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