{"product_id":"lean-architecture-isbn-9780470684207","title":"Lean Architecture","description":"\u003cb\u003eMore and more Agile projects are seeking architectural roots as they struggle with complexity and scale - and they're seeking lightweight ways to do it\u003c\/b\u003e  \u003cul\u003e \u003cli\u003e\n\u003cb\u003eStill seeking?\u003c\/b\u003e In this book the authors help you to find your own path\u003c\/li\u003e \u003cli\u003eTaking cues from Lean development, they can help steer your project toward practices with longstanding track records\u003c\/li\u003e \u003cli\u003e\n\u003cb\u003eUp-front architecture?\u003c\/b\u003e Sure. You can deliver an architecture as code that compiles and that concretely guides development without bogging it down in a mass of documents and guesses about the implementation\u003c\/li\u003e \u003cli\u003e\n\u003cb\u003eDocumentation?\u003c\/b\u003e Even a whiteboard diagram, or a CRC card, is documentation: the goal isn't to avoid documentation, but to document just the right things in just the right amount\u003c\/li\u003e \u003cli\u003e\n\u003cb\u003eProcess?\u003c\/b\u003e This all works within the frameworks of Scrum, XP, and other Agile approaches\u003cbr\u003e \u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003eAbout the Authors xii\u003c\/p\u003e \u003cp\u003ePreface xiii\u003c\/p\u003e \u003cp\u003e\u003cb\u003e1 Introduction 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1 The Touchstones: Lean and Agile 1\u003c\/p\u003e \u003cp\u003e1.2 Lean Architecture and Agile Feature Development 4\u003c\/p\u003e \u003cp\u003e1.3 Agile Production 7\u003c\/p\u003e \u003cp\u003e1.3.1 Agile Builds on Lean 7\u003c\/p\u003e \u003cp\u003e1.3.2 The Scope of Agile Systems 8\u003c\/p\u003e \u003cp\u003e1.3.3 Agile and DCI 9\u003c\/p\u003e \u003cp\u003e1.4 The Book in a Very Small Nutshell 10\u003c\/p\u003e \u003cp\u003e1.5 Lean and Agile: Contrasting and Complementary 11\u003c\/p\u003e \u003cp\u003e1.5.1 The Lean Secret 14\u003c\/p\u003e \u003cp\u003e1.6 Lost Practices 14\u003c\/p\u003e \u003cp\u003e1.6.1 Architecture 15\u003c\/p\u003e \u003cp\u003e1.6.2 Handling Dependencies between Requirements 15\u003c\/p\u003e \u003cp\u003e1.6.3 Foundations for Usability 16\u003c\/p\u003e \u003cp\u003e1.6.4 Documentation 16\u003c\/p\u003e \u003cp\u003eCode Does Not Stand Alone 17\u003c\/p\u003e \u003cp\u003eCapturing the ‘‘Why’’ 19\u003c\/p\u003e \u003cp\u003e1.6.5 Common Sense, Thinking, and Caring 19\u003c\/p\u003e \u003cp\u003e1.7 What this Book is Not About 21\u003c\/p\u003e \u003cp\u003e1.8 Agile, Lean – Oh, Yeah, and Scrum and Methodologies and Such 22\u003c\/p\u003e \u003cp\u003e1.9 History and Such 24\u003c\/p\u003e \u003cp\u003e\u003cb\u003e2 Agile Production in a Nutshell 27\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1 Engage the Stakeholders 27\u003c\/p\u003e \u003cp\u003e2.2 Define the Problem 29\u003c\/p\u003e \u003cp\u003e2.3 Focusing on What the System Is: The Foundations of Form 30\u003c\/p\u003e \u003cp\u003e2.4 Focusing on What the System Does: The System Lifeblood 32\u003c\/p\u003e \u003cp\u003e2.5 Design and Code 33\u003c\/p\u003e \u003cp\u003e2.6 Countdown: 3, 2, 1. . . 34\u003c\/p\u003e \u003cp\u003e\u003cb\u003e3 Stakeholder Engagement 35\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1 The Value Stream 35\u003c\/p\u003e \u003cp\u003e3.1.1 End Users and Other Stakeholders as Value Stream Anchors 36\u003c\/p\u003e \u003cp\u003e3.1.2 Architecture in the Value Stream 37\u003c\/p\u003e \u003cp\u003e3.1.3 The Lean Secret 38\u003c\/p\u003e \u003cp\u003e3.2 The Key Stakeholders 41\u003c\/p\u003e \u003cp\u003e3.2.1 End Users 43\u003c\/p\u003e \u003cp\u003ePsyching Out the End Users 44\u003c\/p\u003e \u003cp\u003eDon’t Forget Behavior 46\u003c\/p\u003e \u003cp\u003eThe End User Landscape 47\u003c\/p\u003e \u003cp\u003e3.2.2 The Business 47\u003c\/p\u003e \u003cp\u003eA Special Note for Managers 48\u003c\/p\u003e \u003cp\u003e3.2.3 Customers 50\u003c\/p\u003e \u003cp\u003e. . . As Contrasted with End Users 50\u003c\/p\u003e \u003cp\u003e‘‘Customers’’ in the Value Stream 52\u003c\/p\u003e \u003cp\u003e3.2.4 Domain Experts 52\u003c\/p\u003e \u003cp\u003eNo Ivory Tower Architects 53\u003c\/p\u003e \u003cp\u003eExperts in Both Problemand Solution Domains 54\u003c\/p\u003e \u003cp\u003e3.2.5 Developers and Testers 55\u003c\/p\u003e \u003cp\u003e3.3 Process Elements of Stakeholder Engagement 57\u003c\/p\u003e \u003cp\u003e3.3.1 Getting Started 58\u003c\/p\u003e \u003cp\u003e3.3.2 Customer Engagement 60\u003c\/p\u003e \u003cp\u003e3.4 The Network of Stakeholders: Trimming Wasted Time 61\u003c\/p\u003e \u003cp\u003e3.4.1 Stovepipe Versus Swarm 61\u003c\/p\u003e \u003cp\u003e3.4.2 The First Thing You Build 64\u003c\/p\u003e \u003cp\u003e3.4.3 Keep the Team Together 65\u003c\/p\u003e \u003cp\u003e3.5 No Quick Fixes, but Some Hope 66\u003c\/p\u003e \u003cp\u003e\u003cb\u003e4 Problem Definition 67\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1 What’s Agile about Problem Definitions? 68\u003c\/p\u003e \u003cp\u003e4.2 What’s Lean about Problem Definitions? 68\u003c\/p\u003e \u003cp\u003e4.3 Good and Bad Problem Definitions 70\u003c\/p\u003e \u003cp\u003e4.4 Problems and Solutions 72\u003c\/p\u003e \u003cp\u003e4.5 The Process Around Problem Definitions 73\u003c\/p\u003e \u003cp\u003e4.5.1 Value the Hunt Over the Prize 73\u003c\/p\u003e \u003cp\u003e4.5.2 Problem Ownership 74\u003c\/p\u003e \u003cp\u003e4.5.3 Creeping Featurism 75\u003c\/p\u003e \u003cp\u003e4.6 Problem Definitions, Goals, Charters, Visions, and Objectives 76\u003c\/p\u003e \u003cp\u003e4.7 Documentation? 77\u003c\/p\u003e \u003cp\u003e\u003cb\u003e5 What the System Is, Part 1: Lean Architecture 79\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1 Some Surprises about Architecture 80\u003c\/p\u003e \u003cp\u003e5.1.1 What’s Lean about This? 82\u003c\/p\u003e \u003cp\u003eDeliberation and ‘‘Pull’’ 83\u003c\/p\u003e \u003cp\u003eFailure-Proof Constraints or Poka-Yoke 83\u003c\/p\u003e \u003cp\u003eThe Lean Mantras of Conservation, Consistency, and Focus 84\u003c\/p\u003e \u003cp\u003e5.1.2 What’s Agile about Architecture? 84\u003c\/p\u003e \u003cp\u003eIt’s All About Individuals and Interactions 84\u003c\/p\u003e \u003cp\u003ePast Excesses 85\u003c\/p\u003e \u003cp\u003eDispelling a Couple of Agile Myths 86\u003c\/p\u003e \u003cp\u003e5.2 The First Design Step: Partitioning 88\u003c\/p\u003e \u003cp\u003e5.2.1 The First Partition: Domain Form Versus Behavioral Form 89\u003c\/p\u003e \u003cp\u003e5.2.2 The Second Partitioning: Conway’s Law 90\u003c\/p\u003e \u003cp\u003e5.2.3 The Real Complexity of Partitioning 93\u003c\/p\u003e \u003cp\u003e5.2.4 Dimensions of Complexity 94\u003c\/p\u003e \u003cp\u003e5.2.5 Domains: A Particularly Interesting Partitioning 94\u003c\/p\u003e \u003cp\u003e5.2.6 Back to Dimensions of Complexity 96\u003c\/p\u003e \u003cp\u003e5.2.7 Architecture and Culture 100\u003c\/p\u003e \u003cp\u003e5.2.8 Wrap-Up on Conway’s Law 100\u003c\/p\u003e \u003cp\u003e5.3 The Second Design Step: Selecting a Design Style 100\u003c\/p\u003e \u003cp\u003e5.3.1 Contrasting Structuring with Partitioning 102\u003c\/p\u003e \u003cp\u003e5.3.2 The Fundamentals of Style: Commonality and Variation 104\u003c\/p\u003e \u003cp\u003e5.3.3 Starting with Tacit Commonality and Variation 105\u003c\/p\u003e \u003cp\u003e5.3.4 Commonality, Variation, and Scope 108\u003c\/p\u003e \u003cp\u003e5.3.5 Making Commonalities and Variations Explicit 111\u003c\/p\u003e \u003cp\u003eCommonality Categories 112\u003c\/p\u003e \u003cp\u003eNext Steps 114\u003c\/p\u003e \u003cp\u003e5.3.6 The Most Common Style: Object Orientation 114\u003c\/p\u003e \u003cp\u003eJust What is Object Orientation? 115\u003c\/p\u003e \u003cp\u003e5.3.7 Other Styles within the Von NeumannWorld 117\u003c\/p\u003e \u003cp\u003e5.3.8 Domain-Specific Languages and Application Generators 120\u003c\/p\u003e \u003cp\u003eThe State of the Art in DSLs 121\u003c\/p\u003e \u003cp\u003eDSLs’ Place in Architecture 121\u003c\/p\u003e \u003cp\u003e5.3.9 Codified Forms: Pattern Languages 122\u003c\/p\u003e \u003cp\u003e5.3.10 Third-Party Software and Other Paradigms 124\u003c\/p\u003e \u003cp\u003e5.4 Documentation? 127\u003c\/p\u003e \u003cp\u003e5.4.1 The Domain Dictionary 128\u003c\/p\u003e \u003cp\u003e5.4.2 Architecture Carryover 128\u003c\/p\u003e \u003cp\u003e5.5 History and Such 129\u003c\/p\u003e \u003cp\u003e\u003cb\u003e6 What the System Is, Part 2: Coding It Up 131\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1 The Third Step: The Rough Framing of the Code 131\u003c\/p\u003e \u003cp\u003e6.1.1 Abstract Base Classes 133\u003c\/p\u003e \u003cp\u003e6.1.2 Pre-Conditions, Post-Conditions, and Assertions 137\u003c\/p\u003e \u003cp\u003eStatic Cling 142\u003c\/p\u003e \u003cp\u003e6.1.3 Algorithmic Scaling: The Other Side of Static Assertions 144\u003c\/p\u003e \u003cp\u003e6.1.4 Form Versus Accessible Services 146\u003c\/p\u003e \u003cp\u003e6.1.5 Scaffolding 147\u003c\/p\u003e \u003cp\u003e6.1.6 Testing the Architecture 149\u003c\/p\u003e \u003cp\u003eUsability Testing 149\u003c\/p\u003e \u003cp\u003eArchitecture Testing 149\u003c\/p\u003e \u003cp\u003e6.2 Relationships in Architecture 153\u003c\/p\u003e \u003cp\u003e6.2.1 Kinds of Relationship 153\u003c\/p\u003e \u003cp\u003e6.2.2 Testing the Relationships 155\u003c\/p\u003e \u003cp\u003e6.3 Not Your Old Professor’s OO 155\u003c\/p\u003e \u003cp\u003e6.4 How much Architecture? 159\u003c\/p\u003e \u003cp\u003e6.4.1 Balancing BUFD and YAGNI 159\u003c\/p\u003e \u003cp\u003e6.4.2 One Size Does Not Fit All 160\u003c\/p\u003e \u003cp\u003e6.4.3 When Are You Done? 160\u003c\/p\u003e \u003cp\u003e6.5 Documentation? 162\u003c\/p\u003e \u003cp\u003e6.6 History and Such 163\u003c\/p\u003e \u003cp\u003e\u003cb\u003e7 What the System Does: System Functionality 165\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1 What the System Does 166\u003c\/p\u003e \u003cp\u003e7.1.1 User Stories: A Beginning 166\u003c\/p\u003e \u003cp\u003e7.1.2 Enabling Specifications and Use Cases 167\u003c\/p\u003e \u003cp\u003e7.1.3 Helping Developers, Too 169\u003c\/p\u003e \u003cp\u003e7.1.4 Your Mileage may Vary 170\u003c\/p\u003e \u003cp\u003e7.2 Who is Going to Use Our Software? 171\u003c\/p\u003e \u003cp\u003e7.2.1 User Profiles 171\u003c\/p\u003e \u003cp\u003e7.2.2 Personas 171\u003c\/p\u003e \u003cp\u003e7.2.3 User Profiles or Personas? 172\u003c\/p\u003e \u003cp\u003e7.2.4 User Roles and Terminology 173\u003c\/p\u003e \u003cp\u003e7.3 What do the Users Want to Use Our Software for? 173\u003c\/p\u003e \u003cp\u003e7.3.1 Feature Lists 173\u003c\/p\u003e \u003cp\u003e7.3.2 Dataflow Diagrams 174\u003c\/p\u003e \u003cp\u003e7.3.3 Personas and Scenarios 174\u003c\/p\u003e \u003cp\u003e7.3.4 Narratives 174\u003c\/p\u003e \u003cp\u003e7.3.5 Behavior-Driven Development 175\u003c\/p\u003e \u003cp\u003e7.3.6 Now that We’re Warmed Up. . . 175\u003c\/p\u003e \u003cp\u003ePrototypes 176\u003c\/p\u003e \u003cp\u003eTowards Foundations for Decisions 176\u003c\/p\u003e \u003cp\u003eKnown and Unknown Unknowns 176\u003c\/p\u003e \u003cp\u003eUse Cases as a Decision Framework 177\u003c\/p\u003e \u003cp\u003e7.4 Why Does the User Want to Use Our Software? 177\u003c\/p\u003e \u003cp\u003e7.5 Consolidation of What the System Does 178\u003c\/p\u003e \u003cp\u003e7.5.1 The Helicopter View 181\u003c\/p\u003e \u003cp\u003eHabits: The Developer View and the User View 182\u003c\/p\u003e \u003cp\u003eTrimming the Scope 185\u003c\/p\u003e \u003cp\u003e7.5.2 Setting the Stage 186\u003c\/p\u003e \u003cp\u003e7.5.3 Play the Sunny Day Scenario 187\u003c\/p\u003e \u003cp\u003eBusiness Rules 191\u003c\/p\u003e \u003cp\u003e7.5.4 Add the Interesting Stuff 193\u003c\/p\u003e \u003cp\u003e7.5.5 Use Cases to Roles 200\u003c\/p\u003e \u003cp\u003eRoles from the Use Case 201\u003c\/p\u003e \u003cp\u003eBridging the Gap between the Business and the Programmer 202\u003c\/p\u003e \u003cp\u003e7.6 Recap 203\u003c\/p\u003e \u003cp\u003e7.6.1 Support the User’s Workflow 203\u003c\/p\u003e \u003cp\u003e7.6.2 Support Testing Close to Development 203\u003c\/p\u003e \u003cp\u003e7.6.3 Support Efficient Decision-Making about Functionality 204\u003c\/p\u003e \u003cp\u003e7.6.4 Support Emerging Requirements 204\u003c\/p\u003e \u003cp\u003e7.6.5 Support Release Planning 204\u003c\/p\u003e \u003cp\u003e7.6.6 Support Sufficient Input to the Architecture 205\u003c\/p\u003e \u003cp\u003e7.6.7 Support the Team’s Understanding of What to Develop 205\u003c\/p\u003e \u003cp\u003e7.7 ‘‘It Depends’’: When Use Cases are a Bad Fit 206\u003c\/p\u003e \u003cp\u003e7.7.1 Classic OO: Atomic Event Architectures 206\u003c\/p\u003e \u003cp\u003e7.8 Usability Testing 208\u003c\/p\u003e \u003cp\u003e7.9 Documentation? 209\u003c\/p\u003e \u003cp\u003e7.10 History and Such 211\u003c\/p\u003e \u003cp\u003e\u003cb\u003e8 Coding It Up: Basic Assembly 213\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1 The Big Picture: Model-View-Controller-User 214\u003c\/p\u003e \u003cp\u003e8.1.1 What is a Program? 214\u003c\/p\u003e \u003cp\u003e8.1.2 What is an Agile Program? 215\u003c\/p\u003e \u003cp\u003e8.1.3 MVC in More Detail 217\u003c\/p\u003e \u003cp\u003e8.1.4 MVC-U: Not the End of the Story 217\u003c\/p\u003e \u003cp\u003eA Short History of Computer Science 218\u003c\/p\u003e \u003cp\u003eAtomic Event Architectures 219\u003c\/p\u003e \u003cp\u003eDCI Architectures 220\u003c\/p\u003e \u003cp\u003e8.2 The Form and Architecture of Atomic Event Systems 220\u003c\/p\u003e \u003cp\u003e8.2.1 Domain Objects 221\u003c\/p\u003e \u003cp\u003e8.2.2 Object Roles, Interfaces, and the Model 221\u003c\/p\u003e \u003cp\u003eExample 223\u003c\/p\u003e \u003cp\u003e8.2.3 Reflection: Use Cases, Atomic Event Architectures, and Algorithms 224\u003c\/p\u003e \u003cp\u003e8.2.4 A Special Case: One-to-Many Mapping of Object Roles to Objects 225\u003c\/p\u003e \u003cp\u003e8.3 Updating the Domain Logic: Method Elaboration, Factoring, and Re-factoring 226\u003c\/p\u003e \u003cp\u003e8.3.1 Creating New Classes and Filling in Existing Function Placeholders 227\u003c\/p\u003e \u003cp\u003eExample 228\u003c\/p\u003e \u003cp\u003e8.3.2 Back to the Future: This is Just Good Old-Fashioned OO 229\u003c\/p\u003e \u003cp\u003e8.3.3 Analysis and Design Tools 229\u003c\/p\u003e \u003cp\u003e8.3.4 Factoring 231\u003c\/p\u003e \u003cp\u003e8.3.5 A Caution about Re-Factoring 231\u003c\/p\u003e \u003cp\u003e8.4 Documentation? 231\u003c\/p\u003e \u003cp\u003e8.5 Why All These Artifacts? 232\u003c\/p\u003e \u003cp\u003e8.6 History and Such 233\u003c\/p\u003e \u003cp\u003e\u003cb\u003e9 Coding it Up: The DCI Architecture 235\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e9.1 Sometimes, Smart Objects Just Aren’t Enough 235\u003c\/p\u003e \u003cp\u003e9.2 DCI in a Nutshell 236\u003c\/p\u003e \u003cp\u003e9.3 Overview of DCI 238\u003c\/p\u003e \u003cp\u003e9.3.1 Parts of the User Mental Model We’ve Forgotten 239\u003c\/p\u003e \u003cp\u003e9.3.2 Enter Methodful Object Roles 240\u003c\/p\u003e \u003cp\u003e9.3.3 Tricks with Traits 242\u003c\/p\u003e \u003cp\u003e9.3.4 Context Classes: One Per Use Case 243\u003c\/p\u003e \u003cp\u003e9.4 DCI by Example 246\u003c\/p\u003e \u003cp\u003e9.4.1 The Inputs to the Design 246\u003c\/p\u003e \u003cp\u003e9.4.2 Use Cases to Algorithms 247\u003c\/p\u003e \u003cp\u003e9.4.3 Methodless Object Roles: The Framework for Identifiers 250\u003c\/p\u003e \u003cp\u003e9.4.4 Partitioning the Algorithms Across Methodful Object Roles 253\u003c\/p\u003e \u003cp\u003eTraits as a Building Block 253\u003c\/p\u003e \u003cp\u003eIn Smalltalk 253\u003c\/p\u003e \u003cp\u003eIn C++ 254\u003c\/p\u003e \u003cp\u003eIn Ruby 256\u003c\/p\u003e \u003cp\u003eCoding it Up: C++ 257\u003c\/p\u003e \u003cp\u003eCoding Up DCI in Ruby 259\u003c\/p\u003e \u003cp\u003e9.4.5 The Context Framework 261\u003c\/p\u003e \u003cp\u003eThe Ruby Code 263\u003c\/p\u003e \u003cp\u003eThe C++ Code 265\u003c\/p\u003e \u003cp\u003eMaking ContextsWork 267\u003c\/p\u003e \u003cp\u003eHabits: Nested Contexts in Methodful Object Roles 277\u003c\/p\u003e \u003cp\u003e9.4.6 Variants and Tricks in DCI 283\u003c\/p\u003e \u003cp\u003eContext Layering 283\u003c\/p\u003e \u003cp\u003eInformation Hiding 283\u003c\/p\u003e \u003cp\u003eSelective Object Role Injection 284\u003c\/p\u003e \u003cp\u003e9.5 Updating the Domain Logic 285\u003c\/p\u003e \u003cp\u003e9.5.1 Contrasting DCI with the Atomic Event Style 286\u003c\/p\u003e \u003cp\u003e9.5.2 Special Considerations for Domain Logic in DCI 287\u003c\/p\u003e \u003cp\u003e9.6 Context Objects in the User Mental Model: Solution to an Age-Old Problem 290\u003c\/p\u003e \u003cp\u003e9.7 Why All These Artifacts? 294\u003c\/p\u003e \u003cp\u003eWhy not Use Classes Instead of ‘‘Methodful Object Roles’’? 295\u003c\/p\u003e \u003cp\u003eWhy not Put the Entire Algorithm Inside of the Class with\u003c\/p\u003e \u003cp\u003ewhich it is Most Closely Coupled? 295\u003c\/p\u003e \u003cp\u003eThen Why not Localize the Algorithm to a Class and Tie it to Domain Objects as Needed? 296\u003c\/p\u003e \u003cp\u003eWhy not Put the Algorithm into a Procedure, and Combine the Procedural Paradigm with the Object Paradigm in a Single Program? 296\u003c\/p\u003e \u003cp\u003eIf I Collect Together the Algorithm Code for a Use Case in One Class, Including the Code for All of its Deviations, Doesn’t the Context Become Very Large? 296\u003c\/p\u003e \u003cp\u003eSo, What do DCI and Lean Architecture Give Me? 297\u003c\/p\u003e \u003cp\u003eAnd Remember. . . 297\u003c\/p\u003e \u003cp\u003e9.8 Beyond C++: DCI in Other Languages 297\u003c\/p\u003e \u003cp\u003e9.8.1 Scala 298\u003c\/p\u003e \u003cp\u003e9.8.2 Python 299\u003c\/p\u003e \u003cp\u003e9.8.3 C# 299\u003c\/p\u003e \u003cp\u003e9.8.4 . . . and Even Java 299\u003c\/p\u003e \u003cp\u003e9.8.5 The Account Example in Smalltalk 300\u003c\/p\u003e \u003cp\u003e9.9 Documentation? 300\u003c\/p\u003e \u003cp\u003e9.10 History and Such 301\u003c\/p\u003e \u003cp\u003e9.10.1 DCI and Aspect-Oriented Programming 302\u003c\/p\u003e \u003cp\u003e9.10.2 Other Approaches 302\u003c\/p\u003e \u003cp\u003e\u003cb\u003e10 Epilog 305\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAppendix A Scala Implementation of the DCI Account Example 307\u003c\/p\u003e \u003cp\u003eAppendix B Account Example in Python 311\u003c\/p\u003e \u003cp\u003eAppendix C Account Example in C# 315\u003c\/p\u003e \u003cp\u003eAppendix D Account Example in Ruby 321\u003c\/p\u003e \u003cp\u003eAppendix E Qi4j 327\u003c\/p\u003e \u003cp\u003eAppendix F Account Example in Squeak 331\u003c\/p\u003e \u003cp\u003eF.1 Testing Perspective 333\u003c\/p\u003e \u003cp\u003eF.2 Data Perspective 333\u003c\/p\u003e \u003cp\u003eF.2.1 BB5Bank 333\u003c\/p\u003e \u003cp\u003eF.2.2 BB5SavingsAccount 334\u003c\/p\u003e \u003cp\u003eF.2.3 BB5CheckingAccount 334\u003c\/p\u003e \u003cp\u003eF.3 Context Perspective 335\u003c\/p\u003e \u003cp\u003eF.3.1 BB5MoneyTransferContext 335\u003c\/p\u003e \u003cp\u003eF.4 Interaction (RoleTrait) Perspective 336\u003c\/p\u003e \u003cp\u003eF.4.1 BB5MoneyTransferContextTransferMoneySource 336\u003c\/p\u003e \u003cp\u003eF.4.2 BB5MoneyTransferContextMyContext 337\u003c\/p\u003e \u003cp\u003eF.4.3 BB5MoneyTransferContextTransferMoneySink 337\u003c\/p\u003e \u003cp\u003eF.5 Support Perspective (Infrastructure Classes) 337\u003c\/p\u003e \u003cp\u003eF.5.1 BB1Context (common superclass for all contexts) 337\u003c\/p\u003e \u003cp\u003eF.5.2 BB1RoleTrait (all RoleTraits are instances of this class) 339\u003c\/p\u003e \u003cp\u003eBibliography 341\u003c\/p\u003e \u003cp\u003eIndex 351\u003c\/p\u003e  \u003cp\u003e\"... a book of advice that is broad, enabling, and concrete.\" (\u003cem\u003eLean Magazine,\u003c\/em\u003e January 2010)   \u003cb\u003eJames O. Coplien\u003c\/b\u003e is a writer, lecturer, and researcher in the field of Computer Science. He has made key contributions in the areas of software design and organizational development, software debugging, and in empirical research. His early work on C++ idioms was one of the three primary sources of the popular Design Patterns. His work on Organizational patterns was an inspiration for both Extreme Programming and for Scrum. Cope was a founding Member of Hillside Group with Kent Beck, Grady Booch, Ward Cunningham, Ralph Johnson, Ken Auer and Hal Hildebrand. He is responsible for starting up several of the conferences in the Pattern Languages of Programming (PLoP) conference series and is a longstanding pattern author and PLoP shepherd.  \u003c\/p\u003e\u003cp\u003e\u003cb\u003eGertrud Bjornvig\u003c\/b\u003e is an experienced software consultant and trainer and has been in software development since 1984. She's been working on development teams as a developer, analyst, and project manager, and has had cross-organizational roles as methodologist and process consultant. Her background is in object-oriented development, including extensive work with UML and RUP. Gertrud has been employed by Enator, Navision, Microsoft, and TietoEnator, but since June 2007 she has been independent as a part of Gertrud \u0026amp; Cope.\u003cbr\u003e Gertrud holds a Master in Computer Science and Communication and is one of the founders of Danish Agile User Group.\u003c\/p\u003e  \u003cb\u003eIt's time for change - after 30 years, DCI has risen to complete the vision of object-oriented programming!\u003c\/b\u003e  \u003cp\u003eAiming at no less than a paradigm shift, \u003ci\u003eLean Architecture\u003c\/i\u003e uses a modern approach to software design, while embracing refreshing new insights of Lean and Agile. Giving a down-to-earth view of Agile requirements and the often-ignored relationship between requirements and architecture, this book goes beyond the fashionable idea of User Stories, and shows you how to employ Use Cases in a lightweight, incremental, Agile way. The authors detail the DCI (Data, Context and Interaction) architecture paradigm and show how DCI succeeds where object-oriented programming languages alone have failed to integrate software design with the end user's understanding of the overall business structure.\u003c\/p\u003e \u003cp\u003eHowever, this is not a methodology book, but a book which focuses on code, with plenty of code examples. Topics covered include: Agile production, Stakeholder Engagement, Organizational issues, Scala\/Python\/Java implementation of the DCI account example, Qi4J and much more.\u003c\/p\u003e \u003cp\u003eRenowned software architecture expert James Coplien and agile requirements expert Gertrud Bjørnvig share their expertise to give you concrete design advice that will help you:\u003c\/p\u003e \u003cul\u003e \u003cli\u003eCreate software that builds on your end-user mental models rather than design methodologies\u003c\/li\u003e \u003cli\u003eWrite software that can directly be verified against behavioral requirements\u003c\/li\u003e \u003cli\u003eOrganize - so that all your stakeholders support each other\u003c\/li\u003e \u003cli\u003eSupport rapidly changing feature code in stable domain code to help embrace change\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003e\u003ci\u003e\u003cb\u003eLean Architecture\u003c\/b\u003e\u003c\/i\u003e casts a new light over important aspects of software development that have been marginalized or forgotten by the agile movement – it will help you find your own path.\u003c\/p\u003e","brand":"Wiley","offers":[{"title":"Default Title","offer_id":47989520105701,"sku":"NP9780470684207","price":55.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9780470684207.jpg?v=1761784435","url":"https:\/\/k12savings.com\/products\/lean-architecture-isbn-9780470684207","provider":"K12savings","version":"1.0","type":"link"}