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.

Reply via email to