Thanks both - some good suggestions. After years of Java I am loving how 'symmetrical' everything is in Clojure (I guess in Lisp). Thanks for the library references.
On 10 May 2013 14:14, Ben Mabey <b...@benmabey.com> wrote: > Hi Colin, > > > On 5/10/13 5:04 AM, Colin Yates wrote: > >> >> 1) to use (defonce *data-source*...) so that every body who requires >> that ns gets the same instance? >> > While this has been done I view this as an antipattern. The big problem > with this approach is that you now can only have a single *data-source* for > your entire application. Testing becomes hard, stopping and restarting is > difficult, etc... While this approach is easy the resulting workarounds > introduce incidental complexity. > > 2) to provide a 'get-ds' accessor which returns a new instance and rely >> on passing that service along to every function that needs it? >> > > Propagating the dependency like this is as much as an antipattern in > Clojure as it is in OO languages[1] IMO. As you point out it is also just > as much fun. :) > > 3) some other way I don't know about >> > > The way I've been doing DI like stuff is with Prismatic's graph[2] and > similar libraries. While graph doesn't explicitly say it is a DI library > it certainly is solving the same problem. What is interesting about graph > is how small it is and how it can solve problems in the large (like an > application) but also on a much smaller scale (e.g. computations with a > handful of functions). While graph's approach may not be as powerful as the > huge DI frameworks in Java (I'm assuming, I haven't used them personally > much) I think you can get 90% of the value with 1% of the code. I've been > using a graph-like library for a number of months in my more complex > applications and it has been fantastic. > > HTH, > Ben > > 1. http://picocontainer.codehaus.**org/propagating-dependency-** > antipattern.html<http://picocontainer.codehaus.org/propagating-dependency-antipattern.html> > 2. http://blog.getprismatic.com/**blog/2012/10/1/prismatics-** > graph-at-strange-loop.html<http://blog.getprismatic.com/blog/2012/10/1/prismatics-graph-at-strange-loop.html> > > https://github.com/Prismatic/**plumbing<https://github.com/Prismatic/plumbing> > > > -- > -- > 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+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en> > --- You received this message because you are subscribed to a topic in the > Google Groups "Clojure" group. > To unsubscribe from this topic, visit https://groups.google.com/d/** > topic/clojure/keid7IGzKjk/**unsubscribe?hl=en<https://groups.google.com/d/topic/clojure/keid7IGzKjk/unsubscribe?hl=en> > . > To unsubscribe from this group and all its topics, send an email to > clojure+unsubscribe@**googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > . > For more options, visit > https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> > . > > > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.