Software Architecture Styles
Software architecture styles are named, reusable organizing schemes that define the kinds of components and connectors a system uses and the constraints on how they may be combined.
Definition
An architecture style is a family of architectures characterized by a vocabulary of component and connector types and a set of constraints on how instances of those types can be configured.
Scope
This topic covers classic styles such as layered, client-server, pipe-and-filter, repository (data-centered), event-driven and publish-subscribe, microkernel, and service-oriented and microservice architectures; the REST architectural style for networked systems; and the quality-attribute trade-offs that motivate selecting one style over another.
Core questions
- What vocabulary of components and connectors defines each style?
- Which quality attributes does a given style promote or inhibit?
- How are styles combined within a single system?
- How do networked and distributed styles such as REST and microservices differ from classic ones?
Key theories
- Styles as component-connector vocabularies
- Shaw and Garlan characterized architectures by recurring patterns of components and connectors with associated constraints, giving the field a vocabulary of styles such as pipe-and-filter, layered, and repository.
- REST architectural style
- Fielding derived REST as a set of constraints — statelessness, uniform interface, cacheability, layered system — that explain the scalability and evolvability of the web and guide network-based service design.
Clinical relevance
Choosing an appropriate style early aligns the system structure with its dominant quality requirements; a poor fit between style and needs is difficult and expensive to correct once development is underway.
Evidence & guidelines
ISO/IEC/IEEE 42010 frames architecture description in terms of viewpoints and views, within which styles are documented and analyzed.
History
The cataloguing of architectural styles began with Shaw and Garlan in the mid-1990s as software architecture became a recognized discipline; Fielding's 2000 dissertation formalized REST, and the 2010s saw the rise of microservice and event-driven styles for cloud-scale systems.
Key figures
- Mary Shaw
- David Garlan
- Roy Fielding
- Len Bass
Related topics
Seminal works
- shaw1996
- fielding2000
- bass2012
Frequently asked questions
- What is the difference between an architectural style and a design pattern?
- An architectural style describes the system-wide organization — the kinds of components and connectors and the rules for combining them — whereas a design pattern solves a more localized design problem within components; styles operate at a higher level of granularity.
- Can a system use more than one style?
- Yes. Real systems are typically heterogeneous, combining styles — for example a layered architecture whose presentation tier is event-driven and whose services communicate via REST — with each style applied where its trade-offs fit best.