component.core

A component is a vector of [k & values?]. For example a minimal component is [:foo]

defc

macro

(defc k & sys-impls)

Defines a component with keyword k and optional metadata attribute-map followed by system implementations (via defmethods).

attr-map may contain :let binding which is let over the value part of a component [k value].

Example:

(defsystem foo)

(defc :foo/bar
  {:let {:keys [a b]}}
  (foo [_]
    (+ a b)))

(foo [:foo/bar {:a 1 :b 2}])
=> 3

defc*

(defc* k attr-map)

Defines a component without systems methods, so only to set metadata.

defsystem

macro

(defsystem sys-name)(defsystem sys-name params-or-doc)(defsystem sys-name docstring params)

A system is a multimethod which takes as first argument a component and dispatches on k.

meta

systems

Map of all systems as key of name-string to var.