Patterns are undeniably useful design aids and a cornerstone of object-oriented programming. Yet with the emergence of agile methodologies like Extreme Programming, our motivation for using patterns has changed. Today, we use patterns when they can help us reduce or remove duplication, simplify the un-simple or make our code better at communicating its intents. In other words, we refactor to patterns for the same reason we refactor in general: to improve the design of our code. But since the motivation for using a pattern, according to the published literature, rarely resembles the motivation to refactor, it is easy to misapply patterns or over-engineer solutions using patterns. In this tutorial, we will study numerous real-world refactorings to patterns (in Java and UML) and examine the refactoring roots of patterns, the role of patterns in evolutionary design and common motivations for refactoring to patterns.
Attendees will get the most out of this tutorial if they have some basic experience with Refactoring and Design Patterns.
Joshua Kerievsky is a software development coach and programmer. After programming on Wall Street for nearly 10 years, in 1995 he founded San Francisco Bay Area-based Industrial Logic (http://industriallogic.com), a company that specializes in Extreme Programming (XP). Since 1999, Joshua has been programming and coaching on small, large and distributed XP projects and teaching XP to people throughout the world. He regularly speaks about XP, has authored numerous articles, simulations and games about XP and patterns and is working on the forthcoming book Refactoring to Patterns (http://industriallogic.com/xp/refactoring/).