curriculum-foundation icon indicating copy to clipboard operation
curriculum-foundation copied to clipboard

LG 03-04 ?? (V2025) rewrite the LGs for coupling

Open gernotstarke opened this issue 9 months ago • 12 comments

differentiate between at least the following categories of coupling:

  • static and dynamic coupling, as explained in [Ford+21]
  • efferent and afferent coupling
  • other types of coupling (e.g. hardware/infrastructure, temporal, data, data-structure, content etc)

gernotstarke avatar Apr 27 '24 15:04 gernotstarke

@gernotstarke What Is [Ford+21]?

mikesperber avatar Apr 28 '24 10:04 mikesperber

Aren't efferent and afferent coupling metrics?

https://en.wikipedia.org/wiki/Software_package_metrics

mikesperber avatar Apr 28 '24 10:04 mikesperber

I'm all for clarifying what we mean by "different types of coupling"

mikesperber avatar Apr 28 '24 10:04 mikesperber

Aren't efferent and afferent coupling metrics?

https://en.wikipedia.org/wiki/Software_package_metrics

Yes Mike, one can measure these types of coupling (incoming, outgoing)... at least in theory. In practice, static versions of both can be measured, if they occur at runtime, you can only count calls in your logfile :-)

I like the distinction "who depends on me" and "who am I dependent on"...

gernotstarke avatar Apr 28 '24 11:04 gernotstarke

@gernotstarke What Is [Ford+21]?

"The Hard Parts": [Ford+21] Neal Ford, Mark Richards, Pramod Sadalage und Zhamak Dehghani: Software Architecture: The Hard Parts. Modern Trade-Off Analyses for Distributed Architectures. OReilly 2021.

gernotstarke avatar Apr 28 '24 11:04 gernotstarke

I like the distinction "who depends on me" and "who am I dependent on"...

Furthermore I like the distinctions:

  • When does this dependency has to be fulfilled? (binding, compile time vs run time)
  • Is this dependency visible in code? (depending on chosen implementation techniques)
  • Is this dependency aligned with the actual dependency from the domain? (if applicable)
  • What is the mode of this dependency? (time, cause-effect, structure, technology, organizational, technology, ...)
  • Is it uni or bi-directional?
  • Is it "strong" or "weak"? (Yes, that's hard to quantify. But most people will agree that inheritance and structural coupling are "strong" while coupling by events/messaging is "weak".)
  • maybe some more ...

alxlo avatar Apr 28 '24 12:04 alxlo

for binding time: [Ford+21] proposes "static vs dynamic" as top-level distinction. Then efferent/afferent.

all static deps are visible in code (per definition).

gernotstarke avatar Apr 28 '24 13:04 gernotstarke

What would we suggest people do with this distinction?

mikesperber avatar Apr 29 '24 08:04 mikesperber

What would we suggest people do with this distinction?

Let them consider how this kind of coupling affects the qualities (especially maintainability, flexibility, understandability, testability, and analyzability) of their software system and its architecture and how changing them could benefit in achieving desired qualities or at least what kind of trade-offs they pose.

alxlo avatar Apr 29 '24 08:04 alxlo

those Microservice fanboys who still believe that getting rid of compile-time dependencies will make their lives easier... because they forgot to consider the consequences on dynamic coupling.

gernotstarke avatar Apr 29 '24 19:04 gernotstarke

those Microservice fanboys who still believe that getting rid of compile-time dependencies will make their lives easier... because they forgot to consider the consequences on dynamic coupling.

I like that - but then let's make it explicit: "... know that forgoing static dependencies in favor of dynamic dependencies does not necessarily reduce the underlying coupling"

mikesperber avatar May 01 '24 08:05 mikesperber

FLWG: Do this, with @mikesperber 's suggestion

mikesperber avatar May 03 '24 10:05 mikesperber