Liking cljdoc? Tell your friends :D

systems.thoughtfull.assay.dependencies.cohesion

Cohesion within bricks, from the symbols each definition references.

  • Cohesion: references to the brick's own namespaces / references to any workspace namespace. References to other libraries don't count.
  • Clusters: groups of the brick's implementation definitions (outside its interface) that don't reference each other (LCOM4). More than one suggests unrelated responsibilities.
  • Unused interface: interface definitions no other brick references.
Cohesion within bricks, from the symbols each definition references.

- Cohesion: references to the brick's own namespaces / references to any
  workspace namespace. References to other libraries don't count.
- Clusters: groups of the brick's implementation definitions (outside its
  interface) that don't reference each other (LCOM4). More than one
  suggests unrelated responsibilities.
- Unused interface: interface definitions no other brick references.
raw docstring

systems.thoughtfull.assay.dependencies.connascence

Connascence between bricks: the static kinds that can be read from source. Connascence within a brick is expected; between bricks it is coupling.

  • Position: interface functions that other bricks call with many positional parameters, so callers depend on their order.
  • Meaning: keywords used in more than one brick, which are usually map keys that the bricks must agree on.
  • Algorithm: the same code, of at least some size, in more than one brick.
Connascence between bricks: the static kinds that can be read from
source. Connascence within a brick is expected; between bricks it is
coupling.

- Position: interface functions that other bricks call with many
  positional parameters, so callers depend on their order.
- Meaning: keywords used in more than one brick, which are usually map
  keys that the bricks must agree on.
- Algorithm: the same code, of at least some size, in more than one
  brick.
raw docstring

systems.thoughtfull.assay.dependencies.interface

Brick dependency metrics from namespace requires, after Robert Martin's package metrics, adapted to Polylith: a brick depends on an interface, and so on every component that implements it.

  • Afferent (Ca): bricks that depend on this brick's interface.
  • Efferent (Ce): interfaces this brick depends on.
  • Instability: Ce / (Ca + Ce), undefined for a brick with neither.
  • Abstractness: 1 - interface forms / all forms. A small interface over a large implementation is abstract; bases are 0.
  • Cohesion: references to the brick's own namespaces / references to any workspace namespace.
  • Clusters: groups of implementation definitions that don't reference each other (LCOM4).
  • Unused interface: interface definitions no other brick references.
  • Shared keywords: keywords this brick uses that another brick also uses, usually map keys the bricks must agree on (connascence of meaning).

Dependency rules map a check to a level (:error or :warning), or to nil to turn it off:

  • :stable-dependencies flags a dependency on a less stable brick (the Stable Dependencies Principle).
  • :cycles flags bricks that depend on each other, directly or not.
  • :new-dependencies flags a dependency that is not in the base, when comparing with one (applied by the baseline component).
  • :unused-interface flags interface definitions that no other brick references.

Two rules take settings as a map with :level:

  • :connascence-of-position {:max n} flags interface functions that other bricks call with more than n positional parameters.
  • :duplicate-code {:min-forms n} flags code of at least n forms that appears in more than one brick (connascence of algorithm).
Brick dependency metrics from namespace requires, after Robert Martin's
package metrics, adapted to Polylith: a brick depends on an interface, and
so on every component that implements it.

- Afferent (Ca): bricks that depend on this brick's interface.
- Efferent (Ce): interfaces this brick depends on.
- Instability: Ce / (Ca + Ce), undefined for a brick with neither.
- Abstractness: 1 - interface forms / all forms. A small interface over
  a large implementation is abstract; bases are 0.
- Cohesion: references to the brick's own namespaces / references to any
  workspace namespace.
- Clusters: groups of implementation definitions that don't reference
  each other (LCOM4).
- Unused interface: interface definitions no other brick references.
- Shared keywords: keywords this brick uses that another brick also
  uses, usually map keys the bricks must agree on (connascence of
  meaning).

Dependency rules map a check to a level (:error or :warning), or to nil to
turn it off:

- :stable-dependencies flags a dependency on a less stable brick (the
  Stable Dependencies Principle).
- :cycles flags bricks that depend on each other, directly or not.
- :new-dependencies flags a dependency that is not in the base, when
  comparing with one (applied by the baseline component).
- :unused-interface flags interface definitions that no other brick
  references.

Two rules take settings as a map with :level:

- :connascence-of-position {:max n} flags interface functions that other
  bricks call with more than n positional parameters.
- :duplicate-code {:min-forms n} flags code of at least n forms that
  appears in more than one brick (connascence of algorithm).
raw docstring

systems.thoughtfull.assay.dependencies.names

Map namespaces to Polylith interfaces.

Map namespaces to Polylith interfaces.
raw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close