A Quick Look at Architectural Styles and Patterns
App Arch Guide 2.0 (Microsoft patterns&practices), Chapter 6, talks about architectural styles like Message-Bus, Layered Architecture, SOA. Beside those styles there are numerous architectural patterns like Plug-in, Peer-to-Peer, Publish-Subscribe. Some authors make a difference between architectural styles, patterns and metaphors.
What is an architectural style? According to App Arch Guide, an architectural style is:
A set of principles. You can think of it as a coarse-grained pattern that provides an abstract framework for a family of systems. An architectural style improves partitioning and promotes design reuse by providing solutions to frequently recurring problems.
The authors of the guide list a number of architectural styles:
Architecture style Description Client-Server Segregates the system into two applications, where the client makes a service request to the server. Component-Based Architecture Decomposes application design into reusable functional or logical components that are location-transparent and expose well-defined communication interfaces. Layered Architecture Partitions the concerns of the application into stacked groups (layers). Message-Bus A software system that can receive and send messages that are based on a set of known formats, so that systems can communicate with each other without needing to know the actual recipient. N-tier / 3-tier Segregates functionality into separate segments in much the same way as the layered style, but with each segment being a tier located on a physically separate computer. Object-Oriented An architectural style based on division of tasks for an application or system into individual reusable and self-sufficient objects, each containing the data and the behavior relevant to the object. Separated Presentation Separates the logic for managing user interaction from the user interface (UI) view and from the data with which the user works. Service-Oriented Architecture (SOA) Refers to Applications that expose and consume functionality as a service using contracts and messages.
Each of those architectural styles are applied to specific areas of interest:
Category Architecture styles Communication Service-Oriented Architecture (SOA), Message Bus, Pipes and Filters Deployment Client/server, 3-Tier, N-Tier Domain Domain Model, Gateway Interaction Separated Presentation Structure Component-Based, Object-Oriented, Layered Architecture
J.D. Meier, summarizing a few key points from the book A Practical Guide to Enterprise Architecture by James McGovern, Scott W. Ambler, Michael E. Stevens, James Linn, Vikas Sharan, and Elias K. Jo, noted a subtle difference between architectural styles and patterns:
- An architectural style is a central, organizing concept for a system.
- An architectural pattern describes a coarse-grained solution at the level of subsystems or modules and their relationships.
- A system metaphor is more conceptual and it relates more to a real-world concept over a software engineering concept.
David Calvert made in 1996 a partial list of architectural styles/patterns:
- Dataflow Systems -- Batch sequential, Pipes and filters.
- Call-and-return systems -- Main program and subroutines, OO systems, Hierarchical layers.
- Independent components -- Communicating processes, Event Systems.
- Virtual Machines -- Interpreters, Rule-based systems.
- Data-centered systems (repositories) -- Databases, Hypertext system, Blackboards.