Gorton presents an exploration of the field of software architecture, as the term applies to large-scale, multitier applications. He also analyzes the role of the architect in scoping an information technology (IT) solution with a set of architectural constraints, its components and their ensuing communication mechanisms, and satisfying a set of stated or implicit quality attributes. The book will help software developers understand what it takes to get the coveted “architect” title, as a progression in their careers. In that regard, the book is highly recommended.
The author does a great job of introducing terms, and describing quality attributes, architectural constraints, and architectural patterns. The survey of middleware architectures and technologies is presented in a very easy-to-understand manner, with concepts building on each other. I found the chapters “A Software Architecture Process” and “Documenting a Software Architecture” somewhat lacking in detail. The International Conference on Data Engineering (ICDE) case study is well presented, and readers can draw parallels with other, similar projects. This case study is prominent across many chapters, and connects the concepts discussed to a real project. “Software Product Lines” describes generic issues and solutions pertaining to creating and managing product pipelines, source code, and components (for reuse).
“Aspect Oriented Architectures” describes the crosscutting concerns in architecture, and provides techniques and tools to address them. “Model-Driven Architecture” speaks to the decoupling of architectural functional specification from the implementation specification. It introduces model-driven architecture (MDA) frameworks, and tools like AndroMDA, ArcStyler, and the Eclipse modeling framework. In “Service-Oriented Architectures,” the author presents the four tenets of service-oriented architecture (SOA): explicit boundaries, autonomous services, sharing schemas and contracts, and policy-based service compatibility.
The book explains what software architects do. However, I found it a bit presumptuous of the author to assume architects always build large-scale applications. I think that precludes architects who dive deep rather than broad. For example, a software architect who designs real-time operating systems does not fit the role described in the book. That said, it is important to recognize that most software architects are indeed tasked with solving broader multitier application problems. The book, intentionally or not, picks the larger audience, and does a good job of satisfying what such an audience would look for.
Throughout, the author provides excellent “Further Reading” sections that readers will do well to probe. In summary, software engineers, especially those working on the design of multitier and large-scale enterprise applications, will find the book a great resource when embarking on an architect career. Existing architects will find it a good reference, both for its content and for the additional pointers it provides for further drill-down into specific topics.