{"product_id":"lean-architecture-for-agile-software-development-paperback-softback-9780470684207","title":"Lean Architecture; for Agile Software Development (Paperback \/ softback) 9780470684207","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eLean Architecture\u003c\/font\u003e\u003cbr\u003e\r\n\u003cfont size=\"5\"\u003efor Agile Software Development\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\u003cp\u003e\u003cfont size=\"4\"\u003eJames O. Coplien (Author), Gertrud Bjørnvig (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9780470684207, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003ePaperback \/ softback, published 18 June 2010\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e384 pages\u003cbr\u003e23.4 x 18.8 x 1.8 cm, 0.753 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cem\u003e\u003cfont size=\"3\"\u003e\u003cp\u003e\"... a book of advice that is broad, enabling, and concrete.\" (\u003cem\u003eLean Magazine,\u003c\/em\u003e January 2010)\u003c\/p\u003e\u003c\/font\u003e\u003c\/em\u003e\u003c\/p\u003e\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\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\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\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\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Computer programming \/ software development [\u003ca title=\"See our other books on Computer programming \/ software development\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Computer%20programming%20\/%20software%20development%20%5BUM%5D%22\"\u003eUM\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wiley","offers":[{"title":"Brand New","offer_id":52501389869336,"sku":"9780470684207","price":23.26,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9780470684207.jpg?v=1786234955","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/lean-architecture-for-agile-software-development-paperback-softback-9780470684207","provider":"Freshly Printed Books","version":"1.0","type":"link"}