Books for Great Software Architects — Application Path
This story will draw the reading path for Great Application Architects
In the Overview, we have seen the high-level roadmap and in Part 1, we went through the Fundamentals Path that covered the first steps into the software architecture which is also considered as a pre-requisite for the specialized parts, 2, 3 and 4.
By completing Part 1, you will be ready to get specialized in one of the architectural domains. In this part, we will draw the reading path for Great Application Architects.
Application Architecture Path
Application Architecture defines the software structure by describing its elements and the relationships between these elements. To learn more about the applications elements (Module, Subsystem and Component), please read my article “Main Concepts in Software Architecture”
In this path, we will focus mainly on the enterprise application architecture and distributed application architecture.
Distributed application is a special type of the enterprise application where its elements and parts are distributed into multiple hosts (physical servers, virtual machines, or containers).
Enterprise Application Architecture Path
Enterprise Application is an Application that supports concurrent access through APIs and/or UI screens and requires heavy involvement for data persistence. Enterprise Application is also known as Information System.
In this path, I found the following two books are the most valuable in this domain:
Book 1: Patterns of Enterprise Application Architecture, by Martin Fowler
This book provides more than 50 patterns addressing multiple issues and problems related to data mapping, domain logic, web presentation, session management and concurrency.
I found the ORM-related patterns (more than 15 patterns) useless as they are already implemented as out of the box capabilities by nowadays ORM frameworks. My recommendation is to read one of the existing books specialized in the ORM rather than reading them here. If you are a Java developer, my recommendation is to go with: Java Persistence with Hibernate.
The most interesting patterns are the one related to the concurrency patterns and base patterns
Book 2: Implementing Domain-Driven Design, by Vaughn
This is one of my favorite books as it capitalizes on the principles and patterns discussed in the books mentioned in this part and the previous part (especially the books; Applying UML and Patterns, Head First Design Patterns, Domain Driven Design, and Patterns of Enterprise Application Architecture), and provides a consolidated, yet practical, implementation for those principles and patterns.
Note: it is very important to read DDD by Eric first (the blue DDD) before reading this book, otherwise you will be fully lost and confused.
Distributed Application Architecture Path
Here, we will be building on the previous path to learn about the distributed application architecture.
As of today, the most common and most important distributed architectural styles are SOA and Microservices and accordingly the distributed application path is also built to support these two styles:
Although the path is segregated into two parallel paths one for SOA and another for Microservices, I found it useful to read SOA path first before going into Microservices where a lot of Microservices principles and patterns are inherited from SOA and it will give a great idea about the differences and similarities between them.
If you are interested in Microservices and not welling to go through SOA, I would recommend for you to read my article “SOA and Microservices Full Comparison”.
Book 3: SOA Principles of Service Design, by Erl
This is one of the most important books in the SOA world. It lists and explains the different principles that when followed, you will get the real value from it.
Book 4: SOA Design Patterns, by Erl
This book provides about 85 design patterns (basic and compound) grouped mainly into inventory and inventory layering patterns, service design, composition and implementation patterns, service contract patterns, governance and security patterns.
I found this book interesting as most of the patterns covered here are either supporting API designs patterns or Microservices patterns (you will see a lot of Microservices patterns are actually inherited from SOA patterns).
Don’t be confused with another book called SOA Patterns by manning, the later is weak and shallow.
Book 5: Building Microservices, by Newman
This is one of my favorite books. In this book, the author tries to highlight the main challenges you are going to face while transforming to Microservices and he also tries to address these challenges by providing the right techniques and suggesting different frameworks, tools and libraries to support you through the transformation process.
Note: It will be highly valuable if you can empower what you have got from this book with an implementation hands-on. If you are a java developer, I would recommend for you “Spring Microservices in Action”
Book 6: Microservices Patterns, by Richardson
In this book, you will formalize what you have learned so far into a set of patterns that links the challenges with solutions and gives them a name that is supposed to streamline your solutioning skills and build strong architectural vocabulary.
Book 7: Building Event-Driven Microservices, by Adam
Microservices prefers choreography over orchestration for higher isolation between the services. This book builds on the previous books to implement choreography-based microservices using event-based platforms.
What have been introduced so far is enough for you to have all the skills needed to be a great application architect. But if you feel like you need to read more, I would recommend for you a book called “Building Evolutionary Architectures, by Neal Ford”.
In this part, we have built on Part 1 and provided a specialized reading path for application architecture.
Don’t forget to follow me to get notifications for my new articles.
About the Creator
I have 20 years of experience in Software development and Software Architecture. In this page, I will share with you topics based on my expertise related to software development and architecture
Kudos for the excellent article. Below is a good read about the design pattern for the database layer: https://medium.com/towards-polyglot-architecture/design-patterns-for-the-database-layer-7b741b126036