Hi there!

Another solution is to use the Micro Monolith Architecture to solve 
dependency problems
which also gets you a really awesome development experience!

https://medium.com/@joakimtengstrand/the-micro-monolith-architecture-d135d9cafbe#.z7gjrqoif

On Wednesday, January 18, 2017 at 3:28:24 PM UTC+1, Jochen wrote:
>
> Hi…
>
> playing around with Stuart Sierras component library I found some behavior 
> (code at end) that I find odd.
> M sample has just two components, data and compute, where data is injected 
> into compute. On start data associates a data map and on stop dissociates 
> it.
> compute uses a value from data's map to compute.
>
> What I found is that after system stop the started version of data is 
> still associated to compute, while the data component in SystemMap is 
> stopped. So, when do
>
>   (def my-system (make-my-system {:factor 2}))
>   (alter-var-root #'my-system component/start-system)
>   (alter-var-root #'my-system component/stop-system)
>   (my-compute (:mycomputecomp my-system) 16)  
>
> my-compute should (as data map is nil'ed on stop) crash but doesn't.
>
> Calling
>
>   (alter-var-root #'my-system component/stop-system)
>
> again fixes it and my-compute crashes as expected.
>
> Any ideas?
>
> Ciao
>
> …Jochen
>
> (ns foo.core
>   (:require [com.stuartsierra.component :as component]))
>
> (defrecord MyDataComponent [data]
>   component/Lifecycle
>   (start [this]
>     (println "Starting MyDataComponent")
>     (assoc this :data {:foo 42}))
>   (stop [this]
>     (println "Stopping MyDataComponent")
>     (dissoc this :data)))
>
> (defn my-data-component []
>   (->MyDataComponent nil))
>
> (defn mydatacomp-foo [mydatacomp]
>   (get-in mydatacomp [:data :foo]))
>
>
> (defrecord MyComputeComponent [factor mydatacomp]
>   component/Lifecycle
>   (start [this]
>     (println "Starting MyComputeComponent")
>     this)
>   (stop [this]
>     (println "Stopping MyComputeComponent")
>     this))
>
> (defn my-compute-component [factor]
>   (map->MyComputeComponent {:factor factor}))
>
> (defn my-compute [mycomputecomp offset]
>   (let [factor (:factor mycomputecomp)
>         foo    (mydatacomp-foo (:mydatacomp mycomputecomp))]
>     (+ (* factor foo) offset)))
>
> (defn make-my-system [config-options]
>   (let [{:keys [factor]} config-options]
>     (component/system-map
>       :mydatacomp (my-data-component)
>       :mycomputecomp (component/using
>                        (my-compute-component factor)
>                        [:mydatacomp]))))
>
>
> ;;;;;; running 
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> (comment
>   (def my-system (make-my-system {:factor 2}))
>   (alter-var-root #'my-system component/start-system)
>   (alter-var-root #'my-system component/stop-system)
>   (my-compute (:mycomputecomp my-system) 16)
>   )
>
>

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