Hi,

I am trying to integrate Stuarts component library into my application. I 
am not sure if I use it correctly or do something else wrong or just have a 
wrong mindset. So I will explain how I am currently using it and the 
problem I see with it.

I have three components: database, a scheduler and web application (note 
that my example is simplified to get faster to the point). These components 
are built like this:

(component/system-map
      :database (db db-uri)
      :scheduler (component/using (scheduler) [:database])
      :web-app (component/using (web-app)
                                [:database
                                 :scheduler] ))

And in my web-app I do something like this:

(start [component]
    (let [db-conn (get-in web-app [:database :db-conn])]
      (assoc component :server
                       (run-server (make-handler web-app db-conn) {:port 
port}))))

And make-handler is a middleware that associates the database component 
into the request map.

Now as I added the scheduler to my system it occured to me that I will have 
to associate the scheduler into the request map too to access it and I 
might have to do that for every other component that is coming along the 
road.
So basically I am tying my web-app to to all these components and I am 
tying some components to other components (like scheduler component to the 
database component).

And by tying this things together this way they do depend on each other and 
I cannot move them anymore. This came to my mind as I started thinking 
about microservices.

So let's say I want to convert the scheduler into a restful microservice, 
it's hard to pass in a database connection into it via HTTP, so it seems 
like it's not decoupled enough. Does that make sense?

Am I using it wrong? Is it ok to pass all kind of dependencies into the 
request map and shove it around in the web application? Any other 
suggestions / remarks?

Best Regards,
Sven

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