principles:low_coupling
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:low_coupling [2012-12-17 22:45] – added link christian | principles:low_coupling [2021-09-02 12:46] – old revision restored (2021-03-29 09:33) 65.21.179.175 | ||
---|---|---|---|
Line 10: | Line 10: | ||
- | ===== Definition | + | ===== Principle Statement |
[[glossary: | [[glossary: | ||
Line 27: | Line 27: | ||
But if coupling is low, there are only few assumptions between the modules which can be violated. This reduces the chance of [[glossary: | But if coupling is low, there are only few assumptions between the modules which can be violated. This reduces the chance of [[glossary: | ||
+ | |||
+ | |||
+ | ===== Strategies ===== | ||
+ | |||
+ | * Indirection: | ||
+ | * Dependency Inversion/ | ||
+ | * Use lower form of coupling: | ||
+ | * Merge modules: | ||
+ | * Hide information | ||
+ | |||
+ | ===== Caveats ===== | ||
+ | |||
+ | Coupling can be reduced by several technical measures (see [[# | ||
+ | |||
+ | Furthermore note that coupling to a stable module is often no problem. The problematic cases are couplings to unstable modules. This means that applying decoupling strategies is beneficial when a coupling to an unstable module is reduced. But it may not be beneficial in the other cases. | ||
+ | |||
+ | See also section [[#contrary principles]]. | ||
Line 35: | Line 52: | ||
===== Evidence ===== | ===== Evidence ===== | ||
/* Comment out what is not applicable and explain the rest: */ | /* Comment out what is not applicable and explain the rest: */ | ||
- | / | + | /* |
* [[wiki: | * [[wiki: | ||
- | * [[wiki: | + | * [[wiki: |
- | / | + | /* |
Line 48: | Line 66: | ||
==== Specializations ==== | ==== Specializations ==== | ||
- | * [[principles: | + | * [[Constantine' |
- | * [[principles: | + | * [[Dependency Inversion Principle]] (DIP): LC aims at reducing the dependencies to other modules. One way to do so is to only depend on abstractions. DIP is about this aspect. |
==== Contrary Principles ==== | ==== Contrary Principles ==== | ||
- | * [[principles:Keep It Simple Stupid]]: Reducing the coupling often involves the use of complicated interaction patterns, indirections, | + | * [[Keep It Simple Stupid]] |
+ | * [[High Cohesion]] (HC): A system consisting of one single module has a very low coupling as there are no dependencies on other modules. But such a system also has low cohesion. The other extreme, very many highly cohesive modules, naturally has a higher coupling between the modules. So here a compromise has to be found. | ||
+ | * [[Rule of Explicitness]] (RoE): Direct communication typically has the disadvantage of a higher coupling. Indirection reduces coupling but creates implicit/ | ||
==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
- | * [[principles:High Cohesion]] | + | * [[Tell, don't Ask/ |
- | * [[principles:Model Principle]] | + | * [[Model Principle]] |
+ | * [[Information Hiding/ | ||
==== Principle Collections ==== | ==== Principle Collections ==== | ||
Line 64: | Line 84: | ||
{{page> | {{page> | ||
{{page> | {{page> | ||
+ | {{page> | ||
- | ===== Example | + | ===== Examples |
Line 80: | Line 101: | ||
* [[wiki> | * [[wiki> | ||
* Martin Fowler: // | * Martin Fowler: // | ||
+ | * Craig Larman: //Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design and Iterative Development// | ||
+ |
principles/low_coupling.txt · Last modified: 2021-10-18 21:49 by christian