I think his last sentence gives you the answer: "A warm shoutout to Tushar, Lyndon, Dean, Alan, Hank, Derek, and all the guys at clj-melb that gave feedback and helped flesh out this rehash of OO design.” (my emphasis)
He wanted an OO approach and has implemented one; specifically behaviour and state coupled together. I think neither Typed Clojure nor Contracts would have achieved this guy’s goal as they are about enforcing a contract (either the shape of data or effects of a fn) in the ‘functional’ paradigm; this guy clearly wanted something in the OO paradigm. Is there a ‘functional’ implementation which gives the same benefits; sure, but that isn’t what he wanted. Are there a bunch of ‘upgrades’ that I am sure we could all apply; sure, but again it seems like he was setting out with a very specific goal in mind and has achieved that. > On 27 Jul 2015, at 18:37, Lawrence Krubner <lawre...@rollioforce.com> wrote: > > I have a question about this: > > "Servers that are running on a particular port can be tracked and stopped. I > have to say, this was the feature that I wanted the most, which motivated the > framework's design. The annoying thing about development in emacs is that I > have to be careful of not losing the reference to the server. Since there was > no way of stopping it unless the repl is restarted. I wanted to implement a > registery for references to running servers to be saved." > > http://z.caudate.me/the-abstract-container-pattern/ > > I have the impression that he's going over the same territory as that covered > by Stuart Sierra, though Zheng doesn't mention "Component" nor "Sierra". But > he offers this as an example of what he's after: > > (defprotocol IRunnable > (start! [system]) > (stop! [system]) > (restart! [system]) > (started? [system]) > (stopped? [system])) > > That much seems similar to Sierra's system. Zheng seems to add an additional > layer by simulating an abstract class above his protocols. As he says: > > A single deftype acts as the abstract container, extending one or more > protocols > A set of methods defined through defmulti that is used within the deftype > form act as abstract methods > The abstract methods all dispatch on map keys (usually :type). > > I am curious if others have found this useful? > > Most of the people who work with Clojure have backgrounds with Object > Oriented Programming, so that paradigm sometimes seems natural, or at least > familiar. I often think these designs are more verbose than they need to be, > but I am curious how others feel. > > > > > > > > > > > -- > 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 > <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 > <mailto:clojure+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- 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/d/optout.