On 19 January 2014 19:55, Brian Craft <craft.br...@gmail.com> wrote:

> http://www.youtube.com/watch?v=ROor6_NGIWU
>
> Around 56:28 Rich is talking about whether components pass a data
> structure, or "an object that has all these verbs and knows how to do stuff
> ...".
>
> Clojure data types also have verbs, in protocols, and if one component
> passes a record to another component, the receiver will need to use those
> verbs to make use of the data. How is that different than the OOP example?
> There's the syntactic difference that in OOP you write it object, verb,
> arguments, and in clojure you write it verb, object, arguments. But that's
> trivial. How is it architecturally different to pass an object with methods
> vs passing a record with protocol?
>

Protocols should be considered a tool for polymorphism, rather than a tool
for encapsulation. You shouldn't consider protocols to be tightly coupled
to a record or type.

To give a more concrete example, consider a edn data structure like:

    #inst "2014-01-19T21:44:46.471-00:00"

By default Clojure reads this as a java.util.Date object, but we could
equally read this as a org.joda.time.DateTime object, or
a hirondelle.date4j.DateTime object.

All these implementations describe the same data, but will have subtly
different methods and interfaces. The data structure serialised in edn
doesn't mandate a particular class, or a particular set of methods.

Similarly, if we imagine a data structure like:

    #myapp/Person {:first "Fred" :last "Mertz"}

You should think of this as a map tagged with "#myapp/Person", not a
representation of a specific Clojure record that has a specific set of
functions. It's up to the receiver to interpret this data, and the
functions that operate on this data might differ between components. For
instance, a component that displays the data to the user might have a
function to derive a person's full name, but a component that archives the
data wouldn't need this functionality.

- James

-- 
-- 
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.

Reply via email to