On Sun, Aug 15, 2010 at 7:45 AM, Brian Hurt <bhur...@gmail.com> wrote: > Circular dependencies are then the canary in the coal mine, warning you that > your code is trending (hard) towards unmaintainability, You ignore the > warning at your peril.
Avoiding circular dependencies can result in either: a) Everything ends up in one file. b) Everything ends up in zillions of small files with very complex dependency structures (and every time you move a function from one namespace to another to avoid a circular dependency, you have to locate every file that uses the relocated function and change the references to that function, all without the help of IDEs that do this kind of refactoring for you -- it can be a lot of work). Both of these scenarios result in their own significant maintainability problems. I think it's much more ideal to be able to divide modules of functions into the appropriate granularity for the task at hand. I have found that for some tasks, circular dependencies arise very naturally at the desired level of granularity, and I don't like having to rework everything into something that avoids circular dependencies. This problem seems to be especially acute in rapidly evolving systems, because you're forced to constantly think about conforming to an acyclic structure at a time when you're focusing on something other than overall structure. I'd rather get things to work, and *then* when the code base becomes stable, figure out a more optimal organization. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en