I believe I misunderstood your question; I didn't realize it was system (as 
opposed to any general component) specific. I think systems can be merged 
together (via 'merge'). Would that help? 

On Wednesday, March 11, 2015 at 2:40:14 PM UTC-4, Colin Yates wrote:
>
> Hi Adrian - I don't follow how that helps integrate two different 
> systems - I wonder if my question was unclear or I am missing 
> something in your answer. Would you mind posting some pseudo code to 
> clarify please? 
>
> On 11 March 2015 at 18:32,  <adrian...@mail.yu.edu <javascript:>> wrote: 
> > You can specify component dependencies using the 'using' function as you 
> > know. As long as you know the key of the component in the system you can 
> > specify this dependency wherever you construct the component. If you 
> want to 
> > parameterize dependencies, write a constructor function which takes the 
> > external dependency as a value. 
> > 
> > On Wednesday, March 11, 2015 at 2:17:12 PM UTC-4, Colin Yates wrote: 
> >> 
> >> I have a non-trivial component which requires a bunch of internal and 
> >> external collaborators to work. This component is itself re-usable. 
> >> 
> >> What I really want to do is have ReusableComponent be a component in a 
> >> system so it can pull its external collaborators. However, 
> ReusableComponent 
> >> constructs its own services etc. so it really want to be (or at least 
> have 
> >> access to) a system. 
> >> 
> >> For example, let's say I have the following: 
> >> 
> >> (defrecord InternalToReusableComponent [bus] 
> >>   (component/Lifecycle 
> >>     (start [this]...)) 
> >> 
> >> (defrecord ReusableComponent [bus logger] 
> >>   (component/Lifecycle 
> >>     (start [this] 
> >> 
> >>       this) 
> >>     ....)) 
> >> 
> >> (defn reusable-component-system [external-collaborator] 
> >>   (component/system-map 
> >>     :bus (....) 
> >>     :logger (....) 
> >>     :reusable-component (component/using (map->ReusableComponent {}) 
> [:bus 
> >> :logger external-collaborator])) 
> >> 
> >> Fine - I now have a system from which I can pull the reusable 
> component. 
> >> However, where does 'external-collaborator' come from? Obviously there 
> is a 
> >> larger system which I want this component to be part of so I can do: 
> >> 
> >> (defn larger-system [] 
> >>   (component/system-map 
> >>      :external-collaborator (...) 
> >>      :reusable-component (component/using (some-magic-glue) 
> >> [:external-collaborator]))) 
> >> 
> >> I am struggling to see what (some-magic-glue) should be. I imagine it 
> >> needs to be something like: 
> >> 
> >> (defrecord SystemAdaptor [external-collaborator internal-system] 
> >>   component/Lifecycle 
> >>   (start [this] 
> >>     (let [internal-system (or internal-system 
> (reusable-component-system 
> >> external-collaborator)) 
> >>            internal-system (component/start internal-system)] 
> >>      (assoc this :internal-system internal-system))) 
> >>   (stop [this] 
> >>     (let [internal-system (:internal-system this) 
> >>            internal-system (component/stop internal-system] 
> >>      (assoc this :internal-system internal-system))) 
> >> 
> >> but it all feels a bit yuck. 
> >> 
> >> I can't merge the two systems because the reusable component is chocka 
> >> full of very fine grained command handlers and both the internal and 
> >> external systems will have their own 'bus' for example. I could 
> namespace 
> >> the keys but that again feels painful... 
> >> 
> >> Hope that is clear - and I look forward to your thoughts :). 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "Clojure" group. 
> > To post to this group, send email to clo...@googlegroups.com 
> <javascript:> 
> > Note that posts from new members are moderated - please be patient with 
> your 
> > first post. 
> > To unsubscribe from this group, send email to 
> > clojure+u...@googlegroups.com <javascript:> 
> > 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+u...@googlegroups.com <javascript:>. 
> > For more options, visit 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