This is probably not clojure specific, but it’s a problem for which i’ve never really found a satisfying in other languages. Maybe clojure has a better opinion on the matter?
How does one evolve/change data (entities) in a system over time without also having to change every piece that touches that data? e.g. if I had an entity “foo”: {:a 'a :b 'b :c {:d 'd}} and I wrote a nice `clojure.spec` for that foo entity, and maybe formalized it into a record, anything that needed the data could read straight from built in functions: (get/get-in/... keyword) I could move one step more formal and write “accessors” for compound data, i.e. (defn get-a-compound [foo] (str (:a foo) (:b foo) (get-in foo [:c :d]) Now at some point I have to change my entity because a business requirement changed, or the domain model wasn’t correct the first time. Must now everything that touches foo and follows the clojure.spec "contract" of the data shape change? What’s the idiomatic clojure way to handle this? Is it a solved problem, or is this just a reality that everyone must suffer? Do I write "getters" for every little piece and lose the :keyword function accessibility? This seems like data hiding, and smells bad. Do I leave the raw data alone, and write compound getters? How do protocols fit into this? In short: how does one prevent the shape of the data from bleeding into the system such that you can evolve your data over time? Any opinions, references, or discussion would be much appreciated. -- 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.