The following are the books I recommend and I keep them handy:
This book provides a solid overview of software architecture. Many topics are presented including architectural characteristics, architectural patterns, component concept, diagramming and presenting architecture, evolutionary architecture, and many other topics.
This is the Fourth Edition of this book. It explains what software architecture is, why it’s important, and how to design, instantiate, analyze and evolve it.
This book covers very well the architecture lifecycle, presents practical guidance and methods that you can use in your projects. You’ll also learn about the quality attributes and how to use them to build your architecture.
Even if this book has been published in 2002 it is still very relevant.
The book presents over forty patterns with UML diagrams, implementation information, as well as detailed code examples in Java or C#.
Armed with this book, you will learn to make important architectural decisions about building an enterprise application and the proven patterns for use when building them.
This book talks about design and architecture. In the first chapter, he explains the difference between the two. The next chapters are dedicated to present the programming paradigms and explain the Design Principles including the SOLID design principles.
Parts four and five of the book focus mostly on architecture. You will learn about components, services, and how to define appropriate boundaries and layers, and organize components and services.
This is a short book with several good design advices. The ideas in this book help you to minimize the complexity of software systems so that you can write software more quickly and cheaply.
It introduces the fundamental problem in software design, which is managing complexity. Then discusses how to approach the software design process, and presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems.