Fundamentals of Software Architecture: An Engineering Approach
- Length: 422 pages
- Edition: 1
- Language: English
- Publisher: O'Reilly Media
- Publication Date: 2020-02-18
- ISBN-10: 1492043451
- ISBN-13: 9781492043454
- Sales Rank: #203388 (See Top 100 Books)
Salary surveys worldwide regularly place software architect in the top 10 best jobs, yet no real guide exists to help developers become architects. Until now. This book provides the first comprehensive overview of software architecture’s many aspects. Aspiring and existing architects alike will examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.
Mark Richards and Neal Ford—hands-on practitioners who have taught software architecture classes professionally for years—focus on architecture principles that apply across all technology stacks. You’ll explore software architecture in a modern light, taking into account all the innovations of the past decade.
This book examines:
- Architecture patterns: The technical basis for many architectural decisions
- Components: Identification, coupling, cohesion, partitioning, and granularity
- Soft skills: Effective team management, meetings, negotiation, presentations, and more
- Modernity: Engineering practices and operational approaches that have changed radically in the past few years
- Architecture as an engineering discipline: Repeatable results, metrics, and concrete valuations that add rigor to software architecture
Preface: Invalidating Axioms Conventions Used in This Book Using Code Examples O’Reilly Online Learning How to Contact Us Acknowledgments Acknowledgments from Mark Richards Acknowledgments from Neal Ford 1. Introduction Defining Software Architecture Expectations of an Architect Make Architecture Decisions Continually Analyze the Architecture Keep Current with Latest Trends Ensure Compliance with Decisions Diverse Exposure and Experience Have Business Domain Knowledge Possess Interpersonal Skills Understand and Navigate Politics Intersection of Architecture and… Engineering Practices Operations/DevOps Process Data Laws of Software Architecture I. Foundations 2. Architectural Thinking Architecture Versus Design Technical Breadth Analyzing Trade-Offs Understanding Business Drivers Balancing Architecture and Hands-On Coding 3. Modularity Definition Measuring Modularity Cohesion Coupling Abstractness, Instability, and Distance from the Main Sequence Distance from the Main Sequence Connascence Unifying Coupling and Connascence Metrics From Modules to Components 4. Architecture Characteristics Defined Architectural Characteristics (Partially) Listed Operational Architecture Characteristics Structural Architecture Characteristics Cross-Cutting Architecture Characteristics Trade-Offs and Least Worst Architecture 5. Identifying Architectural Characteristics Extracting Architecture Characteristics from Domain Concerns Extracting Architecture Characteristics from Requirements Case Study: Silicon Sandwiches Explicit Characteristics Implicit Characteristics 6. Measuring and Governing Architecture Characteristics Measuring Architecture Characteristics Operational Measures Structural Measures Process Measures Governance and Fitness Functions Governing Architecture Characteristics Fitness Functions 7. Scope of Architecture Characteristics Coupling and Connascence Architectural Quanta and Granularity Case Study: Going, Going, Gone 8. Component-Based Thinking Component Scope Architect Role Architecture Partitioning Case Study: Silicon Sandwiches: Partitioning Developer Role Component Identification Flow Identifying Initial Components Assign Requirements to Components Analyze Roles and Responsibilities Analyze Architecture Characteristics Restructure Components Component Granularity Component Design Discovering Components Case Study: Going, Going, Gone: Discovering Components Architecture Quantum Redux: Choosing Between Monolithic Versus Distributed Architectures II. Architecture Styles 9. Foundations Fundamental Patterns Big Ball of Mud Unitary Architecture Client/Server Monolithic Versus Distributed Architectures Fallacy #1: The Network Is Reliable Fallacy #2: Latency Is Zero Fallacy #3: Bandwidth Is Infinite Fallacy #4: The Network Is Secure Fallacy #5: The Topology Never Changes Fallacy #6: There Is Only One Administrator Fallacy #7: Transport Cost Is Zero Fallacy #8: The Network Is Homogeneous Other Distributed Considerations 10. Layered Architecture Style Topology Layers of Isolation Adding Layers Other Considerations Why Use This Architecture Style Architecture Characteristics Ratings 11. Pipeline Architecture Style Topology Pipes Filters Example Architecture Characteristics Ratings 12. Microkernel Architecture Style Topology Core System Plug-In Components Registry Contracts Examples and Use Cases Architecture Characteristics Ratings 13. Service-Based Architecture Style Topology Topology Variants Service Design and Granularity Database Partitioning Example Architecture Architecture Characteristics Ratings When to Use This Architecture Style 14. Event-Driven Architecture Style Topology Broker Topology Mediator Topology Asynchronous Capabilities Error Handling Preventing Data Loss Broadcast Capabilities Request-Reply Choosing Between Request-Based and Event-Based Hybrid Event-Driven Architectures Architecture Characteristics Ratings 15. Space-Based Architecture Style General Topology Processing Unit Virtualized Middleware Data Pumps Data Writers Data Readers Data Collisions Cloud Versus On-Premises Implementations Replicated Versus Distributed Caching Near-Cache Considerations Implementation Examples Concert Ticketing System Online Auction System Architecture Characteristics Ratings 16. Orchestration-Driven Service-Oriented Architecture History and Philosophy Topology Taxonomy Business Services Enterprise Services Application Services Infrastructure Services Orchestration Engine Message Flow Reuse…and Coupling Architecture Characteristics Ratings 17. Microservices Architecture History Topology Distributed Bounded Context Granularity Data Isolation API Layer Operational Reuse Frontends Communication Choreography and Orchestration Transactions and Sagas Architecture Characteristics Ratings Additional References 18. Choosing the Appropriate Architecture Style Shifting “Fashion” in Architecture Decision Criteria Monolith Case Study: Silicon Sandwiches Modular Monolith Microkernel Distributed Case Study: Going, Going, Gone III. Techniques and Soft Skills 19. Architecture Decisions Architecture Decision Anti-Patterns Covering Your Assets Anti-Pattern Groundhog Day Anti-Pattern Email-Driven Architecture Anti-Pattern Architecturally Significant Architecture Decision Records Basic Structure Storing ADRs ADRs as Documentation Using ADRs for Standards Example 20. Analyzing Architecture Risk Risk Matrix Risk Assessments Risk Storming Identification Consensus Agile Story Risk Analysis Risk Storming Examples Availability Elasticity Security 21. Diagramming and Presenting Architecture Diagramming Tools Diagramming Standards: UML, C4, and ArchiMate Diagram Guidelines Presenting Manipulating Time Incremental Builds Infodecks Versus Presentations Slides Are Half of the Story Invisibility 22. Making Teams Effective Team Boundaries Architect Personalities Control Freak Armchair Architect Effective Architect How Much Control? Team Warning Signs Leveraging Checklists Developer Code Completion Checklist Unit and Functional Testing Checklist Software Release Checklist Providing Guidance Summary 23. Negotiation and Leadership Skills Negotiation and Facilitation Negotiating with Business Stakeholders Negotiating with Other Architects Negotiating with Developers The Software Architect as a Leader The 4 C’s of Architecture Be Pragmatic, Yet Visionary Leading Teams by Example Integrating with the Development Team Summary 24. Developing a Career Path The 20-Minute Rule Developing a Personal Radar The ThoughtWorks Technology Radar Open Source Visualization Bits Using Social Media Parting Words of Advice A. Self-Assessment Questions Chapter 1: Introduction Chapter 2: Architectural Thinking Chapter 3: Modularity Chapter 4: Architecture Characteristics Defined Chapter 5: Identifying Architecture Characteristics Chapter 6: Measuring and Governing Architecture Characteristics Chapter 7: Scope of Architecture Characteristics Chapter 8: Component-Based Thinking Chapter 9: Architecture Styles Chapter 10: Layered Architecture Style Chapter 11: Pipeline Architecture Chapter 12: Microkernel Architecture Chapter 13: Service-Based Architecture Chapter 14: Event-Driven Architecture Style Chapter 15: Space-Based Architecture Chapter 16: Orchestration-Driven Service-Oriented Architecture Chapter 17: Microservices Architecture Chapter 18: Choosing the Appropriate Architecture Style Chapter 19: Architecture Decisions Chapter 20: Analyzing Architecture Risk Chapter 21: Diagramming and Presenting Architecture Chapter 22: Making Teams Effective Chapter 23: Negotiation and Leadership Skills Chapter 24: Developing a Career Path Index
Donate to keep this site alive
How to download source code?
1. Go to: https://www.oreilly.com/
2. Search the book title: Fundamentals of Software Architecture: An Engineering Approach
, sometime you may not get the results, please search the main title
3. Click the book title in the search results
3. Publisher resources
section, click Download Example Code
.
1. Disable the AdBlock plugin. Otherwise, you may not get any links.
2. Solve the CAPTCHA.
3. Click download link.
4. Lead to download server to download.