An architectural style is a named collection of architectural design decisions that:
- Are applicable in a given development context.
- Constrain architectural design decisions for a particular system.
- Elicit beneficial qualities in the resulting system.
Architectural styles are a primary way of capturing lessons learned from experience in software system design.
They:
- Have less domain specificity than architectural patterns.
- Can help determine structures ranging from subroutines to top-level application structures.
Definitions of Architectural Style
Architectural styles can also be understood as:
- Recurring organizational patterns and idioms
Established and shared understandings of common design forms. - Abstractions of recurring composition and interaction characteristics in a set of architectures.
Basic Properties of Styles
An architectural style has:
Design Vocabulary
A vocabulary of design elements such as:
- Component types
- Connector types
- Data elements
Examples include:
- Pipes
- Filters
- Objects
- Servers
Configuration Rules
Rules that define the allowed composition of architectural elements.
These include topological constraints that determine how elements can be connected.
Semantic Interpretation
Compositions of design elements have well-defined meanings.
Possible Analyses
Systems built using a style can be analyzed using properties and constraints specific to that style.
Benefits of Using Styles
Design Reuse
Well-understood solutions can be applied to new problems.
Code Reuse
Shared implementations of invariant aspects of a style can be reused.
Understandability
A style can communicate a system’s organization clearly.
For example, the term client-server conveys significant architectural information.
Interoperability
Standardization associated with a style can support interoperability.
Style-Specific Analysis
The constrained design space makes specific architectural analyses possible.
Visualization
Style-specific visualizations can match engineers’ mental models.
Style Analysis Dimensions
When analyzing an architectural style, consider:
- What is the design vocabulary?
- What component and connector types are used?
- What are the allowable structural patterns?
- What is the underlying computational model?
- What are the essential invariants of the style?
- What are common examples of its use?
- What are the advantages and disadvantages of using the style?
- What are the style’s specializations?
Common Architectural Styles
| Category | Architectural Styles |
|---|---|
| Traditional, Language-Influenced | Main program and subroutines, Object-oriented |
| Layered | Virtual machines, Client-server |
| Data-Flow | Batch sequential, Pipe and filter |
| Shared Memory | Blackboard, Rule-based |
| Interpreter | Interpreter, Mobile code |
| Implicit Invocation | Event-based, Publish-subscribe |
| Other | Peer-to-peer, C2, CORBA |