The :sc/create-fn is passed configuration of the component, but not its
dependencies, that comes later. This can often be a map->Record function in
a namespace.  Or, it can be a custom application that validates the
configuration (I use spec) and then calls map->Record.  Component will
later assign dependencies and invoke the start method, which is another
reasonable place to do validation.
.
Of course, your rec9rd may not implement Lifecycle, you may not even need a
record type.  I prefer to avoid records and protocols for my components,
wherever possible.  I'm fine with the component being a simple map, and
doing some destructuring to get at config and dependencies from simple
functions passed the component.

On Sat, May 23, 2020 at 5:47 AM Matching Socks <phill.w...@gmail.com> wrote:

> Sierra's Component README illustrates factory functions that take a
> complete static configuration at once, followed up by injections.  But,
> really, it's none of Component's concern how you work a Lifecycle thing
> into shape for Component to assoc the injections and start it.
>
> In Schematic, sc/create-fn takes a single map as a parameter, but I didn't
> see the README stating what's in the map.  It seems to me that Schematic
> would be free to include all static configuration (i.e., everything except
> other Lifecycle things), or to provide an empty map and assoc the static
> elements piecemeal along with other Lifecycle things, or anything in
> between.
>
> The question came to mind because I sometimes wonder where it was intended
> that Components validate their configuration.  Of course, it hinges on how
> the wiring-up is done.  If you code it yourself, you can use the factory
> function (and refrain from assoc), so the factory function can check
> parameters, which is nice because the resulting Exception does not tie up
> your Emacs with 100 gigabytes of Component fallout.  On the other hand, if
> you must code for the general case, you validate stuff only in the start
> method.
>
> What do you recommend?
>
>> --
> 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.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/clojure/9522140a-a329-41b8-92ed-5a1eececc6c3%40googlegroups.com
> <https://groups.google.com/d/msgid/clojure/9522140a-a329-41b8-92ed-5a1eececc6c3%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Howard M. Lewis Ship

Senior Mobile Developer at Walmart Labs

(971) 678-5210
http://lewisship.net <http://howardlewisship.com>
@hlship

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/CACd-vsPNckMbYfA7nWkxT3DO41ztB-DsRQP-OZTZ2fxoAq1-nw%40mail.gmail.com.

Reply via email to