Architectural patterns express fundamental structural organization schemas for software systems
They provide as set of predefined subsystems, specify their responsibilities, and include rules and guidelines for organizing the relationships between them
Compared with Design Patterns, DP deals with a problem. AP tells you how to build a system
Architectural patterns represent the highest-level patterns in our pattern system
They help you to specify the fundamental structure of an application
Each AP helps you to achieve a specific global system property, such as distributed system, adaptability of the user interface
From Mud to Structure
Help you to avoid sea of components or objects
Examples are Layers, Blackboard and Pipes/Filters
Distributed Systems
Provides a complete infrastructure for distributed applications
Example is Broker
Interactive Systems
Support the structuring of software systems that feature human-computer interaction
Examples are Model-View-Controller and Presentation-Abstraction-Control
Adaptable Systems
Support extension of applications and their adaptation to evolving technology and changing functional requirements
Examples are Reflection and Microkernel patterns
The above categorization is not intended to be exhaustive
We could new one by using Pattern Systems (covered later)
Selection of architectural pattern should be driven by the general properties of the application at hand
Ask youself, if the system is for interactive, need changeability, reliability, etc
Alternatives should also be examined when possible
Different architectural patterns imply different results (even if address the same problem, e.g. MVC is more efficient than a PAC. But PAC is better for multitasking and task-specific user interfaces)
Most software systems will be built according to more than one architectural patterns (Combine and alternate when needed)
Remember: a particular architectural pattern, or a combination of several, is NOT a complete software architecture
AP remains a structural framework for a software system that must be further specificed and refined
It includes the task of integrating the application's functionality with the framework, and detailing its components and relationships, perhaps with help of design patterns and idioms
Chosing a AP is just the first step in general