Understanding Architectural Styles
Definition
Here is a list of definition of architectural styles from different sources:
Dewayne Perry, Alexander Wolf
An architectural style defines a family of software systems in terms of their structural organization. An architectural style expresses components and the relationships between them, with the constraints of their application, and the associated composition and design rules for their construction. [1]
Mary Shaw, David Garlan
the initial step taken by Mary Shaw and David Garlan [2] to define styles was to provide a framework for viewing them. To begin with, they define the architecture of a system as a collection of different components and connectors that work together:
The framework we will adopt is to treat an architecture of a specific system as a collection of computational components—or simply components—together with a description of the interactions among these components—the connectors.
Then they define an architectural style as a family of such systems:
An architectural style, then, defines a family of such systems in terms of a pattern of structural organization. More specifically, an architectural style defines a vocabulary of components and connector types, and a set of constraints on how they can be combined. For many styles there may also exist one or more semantic models that specify how to determine a system's overall properties from the properties of its parts.
Roy Thomas Fielding
His famous dissertation, in which he describes REST as an architectural style, defined architectural style as follows:
An architectural style is a coordinated set of architectural constraints that restricts the roles/features of architectural elements and the allowed relationships among those elements within any architecture that conforms to that style. [3]
Nick Rozanski, Eoin Woods
An architectural style expresses a fundamental structural organization schema for software systems. It provides a set of predefined element types, specifies their responsibilities, and includes rules and guidelines for organizing the relationships between them. [4]
Neal Ford, Mark Richards
Architecture styles, sometimes called architecture patterns, describe a named relationship of components covering a variety of architecture characteristics. An architecture style name, similar to design patterns, creates a single name that acts as shorthand between experienced architects.
An architecture style describes the topology, assumed and default architecture characteristics, both beneficial and detrimental. [5]
Key Points
They encapsulate Important Decisions about the architectural elements and constraints on the elements and their relationships. [1]
They constrain the architecture and coordinate the architects. [1]
As with every pattern, they build a common language and understanding.
They provide a visibility to certain aspects of the architecture so that violations of those aspects and insensitivity to them will be more obvious. [1]
They are a mechanism for categorizing architectures and for defining their common characteristics. [3]
Since architectural styles may address different aspects of software architecture, a given architecture may be composed of multiple styles. [3]
Different areas of the system might exhibit different styles. The glasses you choose will determine the style that you “see.” [6]
Choosing the right architectural style requires an understanding of the problem domain.
An element playing a part in one style may itself be composed of elements arranged in another style. [6]
The notion of architectural style is particularly useful from both descriptive and prescriptive points of view. Descriptively, architectural style defines a particular codification of design elements and formal arrangements. Prescriptively, style limits the kinds of design elements and their formal arrangements. [7]
The key areas of study
Deeply understanding a style implies knowledge of multiple aspects. Listed below are some:
Context, Problem, Solution, Trade-offs
The design vocabulary (elements, relationships, components, connectors, etc.)
Quality Attributes / Characteristics
Design Heuristics, Guidelines, Invariants, Principles, etc.
Underlying models
Related patterns / Styles
Common specializations
Different variations
References
Last updated