Cover of Fundamentals of Software Architecture by Mark Richards, Neal Ford - Business and Economics Book

From "Fundamentals of Software Architecture"

Author: Mark Richards, Neal Ford
Publisher: O'Reilly Media
Year: 2020
Category: Computers

🎧 Free Preview Complete

You've listened to your free 10-minute preview.
Sign up free to continue listening to the full summary.

🎧 Listen to Summary

Free 10-min Preview
0:00
Speed:
10:00 free remaining
Chapter 9: Foundations
Key Insight 1 from this chapter

Foundational Architecture Styles and Patterns

Key Insight

Architecture styles, also known as patterns, define the named relationships between components and encompass various architecture characteristics. They function as a concise shorthand among experienced architects, conveying extensive details about a system's structure, suitable characteristics, typical deployment models, and data strategies. These styles describe the system's topology and its inherent architectural attributes, both advantageous and disadvantageous. Numerous fundamental patterns are embedded within more complex, modern architecture patterns, recurring throughout software architecture history due to their effectiveness in organizing code, deployments, and other architectural facets. An illustrative example is the layered pattern, which segregates concerns based on functionality and continues to manifest in contemporary variations.

A significant anti-pattern to avoid is the 'Big Ball of Mud', conceptualized in a 1997 paper by Brian Foote and Joseph Yoder as a 'haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle'. Such systems are characterized by unregulated growth, repeated expedient repairs, and extensive, often promiscuous, information sharing that results in global or duplicated data. This lack of defined structure severely impedes change and compromises deployment, testability, scalability, and performance. While architects aim to prevent it, this anti-pattern is commonly observed, frequently stemming from insufficient governance over code quality and structural integrity. For instance, a Java web application, when visualized by its inter-class connections, revealed strong coupling that made any modification a terrifying prospect due to unpredictable ripple effects across the codebase.

Historically, software commenced with 'Unitary Architecture', running on a single computer; however, few such systems persist today outside highly constrained environments like embedded systems, as increasing functionality necessitated the separation of concerns. This evolution led to 'Client/Server' or two-tier architectures, which divide technical functionality between a frontend and a backend. Earlier iterations included 'Desktop + database server' for rich desktop applications with data stored on separate servers. Later, the 'Browser + web server' model emerged, where web browsers connected to web servers, which then linked to database servers, enabling wider distribution with thinner client interfaces. The 'Three-tier' architecture, popular in the late 1990s, introduced even greater separation with distinct database, application (managed by application servers), and frontend (HTML/JavaScript) tiers. This style leveraged network protocols like CORBA and DCOM to facilitate distributed communication, exemplifying how early design choices, such as Java's serialization feature, can have enduring implications despite the subsequent evolution of architectural styles.

📚 Continue Your Learning Journey — No Payment Required

Access the complete Fundamentals of Software Architecture summary with audio narration, key takeaways, and actionable insights from Mark Richards, Neal Ford.