Synopses & Reviews
The Complete Guide to Avoiding and Fixing Common Rails 3 Code and Design Problems
As developers worldwide have adopted the powerful Ruby on Rails web framework, many have fallen victim to common mistakes that reduce code quality, performance, reliability, stability, scalability, and maintainability. Rails™ AntiPatterns identifies these widespread Rails code and design problems, explains why they’re bad and why they happen—and shows exactly what to do instead.
The book is organized into concise, modular chapters—each outlines a single common AntiPattern and offers detailed, cookbook-style code solutions that were previously difficult or impossible to find. Leading Rails developers Chad Pytel and Tammer Saleh also offer specific guidance for refactoring existing bad code or design to reflect sound object-oriented principles and established Rails best practices. With their help, developers, architects, and testers can dramatically improve new and existing applications, avoid future problems, and establish superior Rails coding standards throughout their organizations.
This book will help you understand, avoid, and solve problems with
- Model layer code, from general object-oriented programming violations to complex SQL and excessive redundancy
- Domain modeling, including schema and database issues such as normalization and serialization
- View layer tools and conventions
- Controller-layer code, including RESTful code
- Service-related APIs, including timeouts, exceptions, backgrounding, and response codes
- Third-party code, including plug-ins and gems
- Testing, from test suites to test-driven development processes
- Scaling and deployment
- Database issues, including migrations and validations
- System design for “graceful degradation” in the real world
Synopsis
The Complete Guide to Avoiding and Fixing Common Rails 3 Code and Design Problems
As developers worldwide have adopted the powerful Ruby on Rails web framework, many have fallen victim to common mistakes that reduce code quality, performance, reliability, stability, scalability, and maintainability. Rails(TM) AntiPatterns identifies these widespread Rails code and design problems, explains why they're bad and why they happen-and shows exactly what to do instead.
The book is organized into concise, modular chapters-each outlines a single common AntiPattern and offers detailed, cookbook-style code solutions that were previously difficult or impossible to find. Leading Rails developers Chad Pytel and Tammer Saleh also offer specific guidance for refactoring existing bad code or design to reflect sound object-oriented principles and established Rails best practices. With their help, developers, architects, and testers can dramatically improve new and existing applications, avoid future problems, and establish superior Rails coding standards throughout their organizations. This book will help you understand, avoid, and solve problems with Model layer code, from general object-oriented programming violations to complex SQL and excessive redundancyDomain modeling, including schema and database issues such as normalization and serializationView layer tools and conventionsController-layer code, including RESTful codeService-related APIs, including timeouts, exceptions, backgrounding, and response codesThird-party code, including plug-ins and gemsTesting, from test suites to test-driven development processesScaling and deploymentDatabase issues, including migrations and validationsSystem design for graceful degradation in the real world
About the Author
Chad Pytel is the founder and CEO of thoughtbot, a software development firm specializing in Ruby on Rails, and creators of Paperclip, Shoulda, FactoryGirl, and Hoptoad, among other projects. thoughtbot embraces both agile development methodologies and a “getting real” project philosophy. Chad coauthored
Pro Active Record: Databases with Ruby and Rails (Apress, 2007) and has presented at various conferences around the world. To follow along with Chad and the rest of the thoughtbot team’s ideas on development, design, technology, and business, visit their blog at http://robots.thoughtbot.com.
Tammer Saleh is the director of engineering at Engine Yard. He wrote the Shoulda testing framework, was the primary developer and project manager for thoughtbot’s fantastic Hoptoad service, and is an experienced Ruby on Rails trainer and speaker. In previous lives, he’s done AI development for the NCSA and the University of Illinois, as well as systems administration for both Citysearch.com and Caltech’s Earthquake Detection Network. You can find him online at http://tammersaleh.com.
Table of Contents
Foreword xi Introduction xiii
Acknowledgments xvii
About the Authors xix
Chapter 1: Models 1
AntiPattern: Voyeuristic Models 2
AntiPattern: Fat Models 14
AntiPattern: Spaghetti SQL 31
AntiPattern: Duplicate Code Duplication 50
Chapter 2: Domain Modeling 73
AntiPattern: Authorization Astronaut 74
AntiPattern: The Million-Model March 79
Chapter 3: Views 89
AntiPattern: PHPitis 91
AntiPattern: Markup Mayhem 107
Chapter 4: Controllers 117
AntiPattern: Homemade Keys 118
AntiPattern: Fat Controller 123
AntiPattern: Bloated Sessions 154
AntiPattern: Monolithic Controllers 161
AntiPattern: Controller of Many Faces 167
AntiPattern: A Lost Child Controller 170
AntiPattern: Rat’s Nest Resources 180
AntiPattern: Evil Twin Controllers 184
Chapter 5: Services 189
AntiPattern: Fire and Forget 190
AntiPattern: Sluggish Services 195
AntiPattern: Pitiful Page Parsing 197
AntiPattern: Successful Failure 201
AntiPattern: Kraken Code Base 207
Chapter 6: Using Third-Party Code 211
AntiPattern: Recutting the Gem 213
AntiPattern: Amateur Gemologist 214
AntiPattern: Vendor Junk Drawer 216
AntiPattern: Miscreant Modification 217
Chapter 7: Testing 221
AntiPattern: Fixture Blues 223
AntiPattern: Lost in Isolation 236
AntiPattern: Mock Suffocation 240
AntiPattern: Untested Rake 246
AntiPattern: Unprotected Jewels 251
Chapter 8: Scaling and Deploying 267
AntiPattern: Scaling Roadblocks 268
AntiPattern: Disappearing Assets 271
AntiPattern: Sluggish SQL 272
AntiPattern: Painful Performance 282
Chapter 9: Databases 291
AntiPattern: Messy Migrations 292
AntiPattern: Wet Validations 297
Chapter 10: Building for Failure 301
AntiPattern: Continual Catastrophe 302
AntiPattern: Inaudible Failures 306
Index 311