Layer
Context
A large system that requires decomposition.
Problem
Designing a complex systems with high- and low-level issues.
Known Uses
-
Virtual Machines
-
APIs
-
Information Systems
Forces
-
Source code changes should not ripple through the system
-
Interfaces should be stable
-
Parts of the system should be exchangeable
-
Reusability of low-level issues for other systems
-
Better understanding and maintainability
-
Complex components needs further decomposition
-
Crossing components boundaries may impede performance, especially if substantial amount of data must be transferred over several boundaries
-
The system is build by a team of programmers, and work has to be subdivided along clear boundaries
Consequences
-
Reuse of layers
-
Support for standardization
-
Dependencies are kept local
-
Exchangeability
Liabilites
-
Cascades of changing behavior
-
Lower efficiency
-
Unnecessary work
-
Difficulty of establishing the correct granularity of layers