Introduction # About this book Metapatterns Part 1. Foundations # Modules and complexity Forces, asynchronicity, and distribution Four kinds of software Arranging communication Programming and architectural paradigms Orchestration Choreography Shared data Comparison of the options Part 2. Basic Metapatterns # Monolith Shards Layers Services Pipeline Part 3. Extension Metapatterns # Middleware Shared Repository Proxy Orchestrator Combined Component Part 4. Fragmented Metapatterns # Layered Services Polyglot Persistence Backends for Frontends (BFF) Service-Oriented Architecture (SOA) Hierarchy Part 5. Implementation Metapatterns # Plugins Hexagonal Architecture Microkernel Mesh Part 6. Analytics # Comparison of architectural patterns Sharing functionality or data among services Pipelines in architectural patterns Dependency inversion in architectural patterns Indirection in commands and queries Ambiguous patterns Architecture and product life cycle Real-world inspirations for architectural patterns The heart of software architecture Cohesers and decouplers Deconstructing patterns Choose your own architecture Part 7. Appendices # Appendix A. Acknowledgements. Appendix B. Books referenced. Appendix C. Copyright. Appendix D. Disclaimer. Appendix E. Evolutions. Monolith: to Shards Monolith: to Layers Monolith: to Services Monolith: to Plugins Shards: share data Shards: share logic Layers: make more layers Layers: help large projects Layers: improve performance Layers: gain flexibility Services: add or remove services Services: add layers Pipeline: Middleware: Shared Repository: Proxy: Orchestrator: Combined Component: Appendix F. Format of a metapattern. Appendix G. Glossary. Appendix H. History of changes. Appendix I. Index of patterns. << Appendix I. Index of patterns. Introduction >>