Layered Architectural Design Patterns
Layered patterns which focus on separating designs into distinct areas of concern to group classes and components toghether.
There are specific rules to which we should stick to when working with Layers.
- A Layer is only allow to communicate with layers immediately above or below.
- All the layers should follow the same architecture design, different design patterns should not be mixed in the same layer.
- All the elements of the layer should be semantically related.
- If there is a components to which all the layers need to have access they should access to a global component.
Client/Server Pattern
- Distinct client and server
- Separated by network
- Communication protocol
- Many clients, one server
Pros | Cons |
Secure | Requires Network |
Simple Communication | Difficult to scale out |
Centralized control | Single Point of failure |
Easy to manage | Hard to debug |
Layered Pattern
Lowe layers need to be super flexible because they will serve to upper layers.
- Strict areas of concern
- Communication is only to immediate neighbors.
Pros | Cons |
High isolation | Can hide complexity |
High abstraction | Deep call chains |
Structured Communication | May harm performance |
Easy to scale out | Lowest layer must cover all use cases |
N-Tier Architecture
Similar to Layered Pattern but each of them is deployed onto different machines.
- Layers deployed to servers
- Usually 3 Tiers
- Communication between layers uses network
Pros | Cons |
High abstraction | Network = Point of failure |
High isolation | Network may be slow |
Structured communication | Coarse interfaces |
Easy to scale out | Hard to debug |
Logical Layered Design
Layering Strategy
Define Layer Interfaces
Alternatives: Singletons, Command Pattern, Dependency Injection, Message-based,…