Git Product home page Git Product logo

Comments (3)

tangrammer avatar tangrammer commented on May 24, 2024

Hi @frankiesardo
I hope don't make noise here, but if I fully got your first need/requirement:

If dependencies were stored at the system level I would only need to declare them once. I realise this would break component/using but to me the dependency tree makes more sense as a system property, rather than as a component property.

do you intend something like that?

(ns production)

(defn get-system-map []
  (component/system-map
          :foo (Foo. nil)
          :bar (Bar.)))

(defn assoc-deps [system]
  (component/system-using system {:foo [:bar]}))

(def prod-system
  (-> (get-system-map)
      assoc-deps))

(component/start prod-system)

(ns developement
  (:require [production :refer (get-system-map assoc-deps)]))

(def dev-system
  (-> (get-system-map)
      (assoc :foo (DevFoo.))
      assoc-deps))

(component/start dev-system)

And, if you expand a bit your component dependency scenario and concept related maybe I can try to hep too

Foo could be created directly passing Bar; only in a system where :bar is part of the dependency tree should Foo declare it as a dependency.

from component.

frankiesardo avatar frankiesardo commented on May 24, 2024

I mean, there's nothing you can't do already. I usually end up with something like:

(defn assoc-with-meta [m k v]
  (let [meta (meta (k m))]
    (assoc m k (with-meta v meta))))

(def dev-system (assoc-with-meta system :foo (DevFoo.))) ;; yay!

I guess it was more an issue/question about the library design. I would have expected vanilla assoc to "just workβ„’".

If component/using needs to be supported as a use case, then component/system-map could simply attach to the SystemMap meta the result of merging the dependencies of all its components.

from component.

 avatar commented on May 24, 2024

I definitely think of dependencies as a property of the individual component, not the system as a whole.

For example, a mock or stub component used for testing will often have different dependencies from the "real" component it replaces.

If your dependencies are static, you can still call system-using after you construct your dev-system.

from component.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.