Per some recommendations on clojurians #clojure channel:
- namespaced keys and addition over destruction
- generally keep your data as flat as possible
- finicky nested over "organized" data models are magnets for repeated
restructures into a new "better, more organized" structure
On Monday, July 10, 2017 at 2:39:25 PM UTC-4, Luke Horton wrote:
>
> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.