When reading different books or articles on software patterns, you will notice that there are different and sometimes contradictory proposals on how to organize these patterns. Pragmatically I added patterns to all potential categories
I reused some category proposals from books and finally came up with the following results:
-
Overall System Structure: Patterns to structure systems or large components. Sometimes named From Mud to Structure, for example: Layers, Tiers, Master/Slave, Client/Server, Domain-Model, Transaction-Script, Virtual Machine.
-
Data flow: Pipes-and-Filter and its variants, Blackboard
-
Interactive Systems: Model-View-Controller, Model-View-ViewModel and their variants
-
Integration Patterns: Publish-Subscribe, Messaging, Remote-Procedure-Call, Hub-and-Spoke etc.
-
Adaptive Systems: PlugIn, Broker, MicroServices
-
Domain Patterns: Open-Host-Service, Published-Language, Anticorruption-Layer, Separate-Ways
-
Stability and Robustness Patterns: Bulkhead, Timeout, Circuit-Breaker, Heartbeat, Handshake etc.
-
Resource Management Patterns: Patterns for resource acquisition (lookup, lazy/eager or partial acquisition), handling resource lifecycle (caching, pooling, coordination) and others.
-
Workflow Patterns: TODO
-
Security Patterns: TODO
-
Microservice Patterns: TODO
-
Design Patterns: Fine-grained patterns, often associated with class or object structure, behavior or creation. I concentrate on those which are independend of the underlying programming paradigm, e.g. Proxy, Adapter, Facade, Registry, Command, Observer