In computer science, an architecture pattern is a general, reusable solution to a recurring architecture problem. Architecture patterns are similar to software design patterns but have a broader scope. They serve as a reference model and source of inspiration when designing the architecture of a computer system or software, to break it down into simpler elements. In contrast to design patterns, they do not determine a concrete (usually small or local) subproblem, but the basic organization and interaction between the components of an application. Some books mention architectural patterns and architectural styles as the same.
Architectural patterns can be divided into several categories:
These patterns particularly support the extensibility and adaptability of software systems.
- Dependency Injection
These patterns are intended to help organize the multitude of components and objects of a software system. The functionality of the overall system is divided into cooperating subsystems.
- Command Query Responsibility Segregation: Separation of the business model into parts that fetch data (query) and parts that change data or execute business.
- Data Context Interaction: Separation of business objects (data), use cases, algorithms (context) and business roles (interaction).
- Domain-driven Design and Naked Objects: Application domain-driven approach to architecture and design
- Pipes and Filters: Describes the structure for systems that process data streams. The system is structured by several independent units: processing steps, so-called filters, with a conversion (e.g. addition, removal, modification) of data and connections between the filters, so-called pipes, for efficient forwarding of the data.
- Layered architecture: Separates the components of a software system into layers that build on each other
- Bulletin board: An architectural pattern for managing problem-solving processes. On the bulletin board, data from individual sub-processes is stored in a hierarchically organized form. The bulletin board is now able to notify other sub-processes of the storage or modification of this data. This enables the sub-processes to work almost in parallel.
Illustration by https://sanet.lc/blogs/
Patterns in this category help to structure human-computer interactions.
Model View Controller (MVC), Model View Presenter, and Remote Presentation Model
Divides the user interface interactions into three different roles. The model contains the data to be represented and the business logic. It is independent of presentation and control. The view is responsible for displaying the required data from the model and receiving user interactions. It knows both its controller and the model whose data it presents, but is not responsible for further processing of the data passed by the user. The controller receives user actions from the view, evaluates them and acts accordingly.
An architectural pattern for structuring interactive software systems. These are broken down into parts in such a way that each part offers exactly one task of the system. This gives the system a high degree of flexibility and you only have to make sure that these parts are put together to form a functioning whole and also work together.
This category supports the use of distributed resources and services in networks, such as orchestration.
- Client-server describes another way to distribute tasks and services within a network. The tasks are performed by programs that are divided into clients and servers. The client can request a task from the server if desired, and the server responds to the request.
- Peer-to-peer refers to a way of distributing tasks and services within a network. All computers have equal rights and can both use and provide services. Likewise, the network participants can be divided into different groups depending on their qualifications and take on specific tasks.
- Service-oriented architecture (SOA) is an architectural pattern for distributed systems to structure and use services of IT systems. Through orchestration, business processes are mapped by service implementations. By orchestrating services at low levels of abstraction, services at higher levels of abstraction can be created quite flexibly and with the greatest possible reusability.
- Edge Computing is decentralized data processing at the edge of the network. This means that the ever-increasing computing power of end devices such as mobile phones is used to make calculations for the user in order to save bandwidth and reduce response time.