Code Shipping - Dependency (Coupling)
About
Logical Data Modeling - Dependency (Coupling) in code.
A (module|package|library) often requires other (packages|module) to be installed to function correctly. Such a relation is called a dependency.
Coupling or dependency is the degree to which each program module relies on each one of the other modules.
Dependencies are not only dynamic with modules, there is also static one such as:
- a sdk
- static assets (such as image, configuration file)
A library dependency define an an abstraction layer in your code.
Articles Related
Management
Format
If you need to add a dependency in your project, you may:
- include it as package (archive file containing the whole code and published) from a shared library
- or copy the source code into your own project tree.
The issue with:
- including the library, It’s difficult
- to customize the library in any way
- to deploy it (because you need to make sure every client has that library available)
- copying the code into your own project is:
- any custom changes you make are difficult to merge when upstream changes become available.
This is a trade-off. Git try to address this issue with submodules (see also git sub-project)
Type
Transitive
A dependency of a dependency is a transitive dependency.
External
Same as What is a Transitive Dependency?
exported
An exported dependency is a library that will be found in the compile classpath of the consumer (ie exported to the consumer)
Visualization
Graph
see dependency graph
Death Star
Services relationship (ie dependency).
All component are placed on a circle and if they have a dependency you will draw a line between this components. And as you see, you got a sort of big planet of death … Beautiful.
Dependency indirection
One reason people use symbolic references (like semantic versioning) is so that we can refer to “anything greater than 2.3.4” and not worry about the specific thing that’s used.
As numerous incidents have demonstrated late-binding in production is evil and no sane Ops person would ever do this. How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript
Hell
Possible solution is called package relocation
Update
- Renovate - Automated dependency updates. Multi-platform and multi-language.
Phantom
Doppelgangers
Doppelgangers is the same dependency installed twice at two differents location.