In 1994, Design Patterns changed the landscape of object-oriented development by introducing classic solutions to recurring design problems. In 1999, Refactoring revolutionized design by introducing an effective process for improving code. With the highly anticipated Refactoring to Patterns, Joshua Kerievsky has changed our approach to design by forever uniting patterns with the evolutionary process of refactoring.This book introduces the theory and practice of pattern-directed refactorings: sequences of low-level refactorings that allow designers to safely move designs to, towards, or away from pattern implementations. Using code from real-world projects, Kerievsky documents the thinking and steps underlying over two dozen pattern-based design transformations. Along the way he offers insights into pattern differences and how to implement patterns in the simplest possible ways.Coverage includes: A catalog of twenty-seven pattern-directed refactorings, featuring real-world code examples Descriptions of twelve design smells that indicate the need for this book's refactorings General information and new insights about patterns and refactoring Detailed implementation mechanics: how low-level refactorings are combined to implement high-level patterns Multiple ways to implement the same pattern-and when to use each Practical ways to get started even if you have little experience with patterns or refactoringRefactoring to Patterns reflects three years of refinement and the insights of more than sixty software engineering thought leaders in the global patterns, refactoring, and agile development communities. Whether you're focused on legacy or “greenfield” development, this book will make you a better software designer by helping you learn how to make important design changes safely and effectively.
Cited By
- Zakeri-Nasrabadi M, Parsa S and Jafari S (2024). Measuring and improving software testability at the design level, Information and Software Technology, 174:C, Online publication date: 1-Oct-2024.
- Alharbi M and Alshayeb M (2024). An empirical investigation of the relationship between pattern grime and code smells, Journal of Software: Evolution and Process, 36:9, Online publication date: 16-Sep-2024.
- Riemer Y, Nogueira P, Matos S and Borges H RMT: A Semi-Automated Tool for Refactoring Design Patterns Proceedings of the XXXVII Brazilian Symposium on Software Engineering, (77-82)
- Flageol W, Menaud É, Guéhéneuc Y, Badri M and Monnier S (2023). A mapping study of language features improving object-oriented design patterns, Information and Software Technology, 160:C, Online publication date: 1-Aug-2023.
- Altoyan N and Batory D (2022). On Proving the Correctness of Refactoring Class Diagrams of MDE Metamodels, ACM Transactions on Software Engineering and Methodology, 32:2, (1-42), Online publication date: 30-Apr-2023.
- Rebai S, Alizadeh V, Kessentini M, Fehri H and Kazman R (2022). Enabling Decision and Objective Space Exploration for Interactive Multi-Objective Refactoring, IEEE Transactions on Software Engineering, 48:5, (1560-1578), Online publication date: 1-May-2022.
- Silva G, Andrade V, Ré R and Meneses R A Quasi-Experiment to Investigating the Impact of the Strategy Design Pattern on Maintainability Proceedings of the XXXV Brazilian Symposium on Software Engineering, (105-114)
- Tang Y, Khatchadourian R, Bagherzadeh M, Singh R, Stewart A and Raja A An Empirical Study of Refactorings and Technical Debt in Machine Learning Systems Proceedings of the 43rd International Conference on Software Engineering, (238-250)
- Wirfs-Brock R and Kohls C Elephants, patterns, and heuristics Proceedings of the 26th Conference on Pattern Languages of Programs, (1-15)
- Nguyen P, Song H, Chauvel F, Muller R, Boyar S and Levin E Using microservices for non-intrusive customization of multi-tenant SaaS Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (905-915)
- Vassallo C, Grano G, Palomba F, Gall H and Bacchelli A (2019). A large-scale empirical exploration on refactoring activities in open source software projects, Science of Computer Programming, 180:C, (1-15), Online publication date: 1-Jul-2019.
- Kim J, Batory D and Gligoric M Code transformation issues in move-instance-method refactorings Proceedings of the 3rd International Workshop on Refactoring, (17-22)
- Vedurada J and Nandivada V (2018). Identifying refactoring opportunities for replacing type code with subclass and state, Proceedings of the ACM on Programming Languages, 2:OOPSLA, (1-28), Online publication date: 24-Oct-2018.
- Han A and Cha S (2018). Two-Phase Assessment Approach to Improve the Efficiency of Refactoring Identification, IEEE Transactions on Software Engineering, 44:10, (1001-1023), Online publication date: 1-Oct-2018.
- Wirfs-Brock R Are software patterns simply a handy way to package design heuristics? Proceedings of the 24th Conference on Pattern Languages of Programs, (1-15)
- Chávez A, Ferreira I, Fernandes E, Cedrim D and Garcia A How does refactoring affect internal quality attributes? Proceedings of the XXXI Brazilian Symposium on Software Engineering, (74-83)
- Mongiov M, Pappalardo G and Tramontana E (2017). Specifying and identifying widely used crosscutting concerns, Knowledge-Based Systems, 126:C, (20-32), Online publication date: 15-Jun-2017.
- Bafandeh Mayvan B, Rasoolzadegan A and Ghavidel Yazdi Z (2017). The state of the art on design patterns, Journal of Systems and Software, 125:C, (93-118), Online publication date: 1-Mar-2017.
- Boss B, Tischer C, Krishnan S, Nutakki A and Gopinath V Setting up architectural SW health builds in a new product line generation Proccedings of the 10th European Conference on Software Architecture Workshops, (1-7)
- Stuurman S, Passier H and Barendsen E Analyzing students' software redesign strategies Proceedings of the 16th Koli Calling International Conference on Computing Education Research, (110-119)
- Lin Y, Peng X, Cai Y, Dig D, Zheng D and Zhao W Interactive and guided architectural refactoring with search-based recommendation Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, (535-546)
- Ichii M, Shimbara D, Suzuki Y and Ogawa H Refactoring verification using model transformation Proceedings of the 1st International Workshop on Software Refactoring, (17-24)
- Bernstein M Storyspace 3 Proceedings of the 27th ACM Conference on Hypertext and Social Media, (201-206)
- Kim J, Batory D, Dig D and Azanza M Improving refactoring speed by 10X Proceedings of the 38th International Conference on Software Engineering, (1145-1156)
- Brant J and Steimann F (2015). Refactoring Tools are Trustworthy Enough and Trust Must be Earned, IEEE Software, 32:6, (80-83), Online publication date: 1-Nov-2015.
- Hafiz M and Overbey J (2015). Refactoring Myths, IEEE Software, 32:6, (39-43), Online publication date: 1-Nov-2015.
- Bunke M Software-security patterns Proceedings of the 20th European Conference on Pattern Languages of Programs, (1-17)
- Cardoso B and Figueiredo E Co-Occurrence of Design Patterns and Bad Smells in Software Systems Proceedings of the annual conference on Brazilian Symposium on Information Systems: Information Systems: A Computer Socio-Technical Perspective - Volume 1, (347-354)
- Fenske W and Schulze S Code Smells Revisited Proceedings of the 9th International Workshop on Variability Modelling of Software-Intensive Systems, (3-10)
- Dibble C and Gestwicki P (2014). Refactoring code to increase readability and maintainability, Journal of Computing Sciences in Colleges, 30:1, (41-51), Online publication date: 1-Oct-2014.
- Hall T, Zhang M, Bowes D and Sun Y (2014). Some Code Smells Have a Significant but Small Effect on Faults, ACM Transactions on Software Engineering and Methodology, 23:4, (1-39), Online publication date: 5-Sep-2014.
- Ge X and Murphy-Hill E Manual refactoring changes with automated refactoring validation Proceedings of the 36th International Conference on Software Engineering, (1095-1105)
- Kim J, Batory D and Dig D Can undergraduates script their own refactorings? Proceedings of the 2013 ACM workshop on Workshop on refactoring tools, (9-12)
- Chalekian P POSDCORB Proceedings of the 20th Conference on Pattern Languages of Programs, (1-20)
- Vakilian M, Chen N, Zilouchian Moghaddam R, Negara S and Johnson R A compositional paradigm of automating refactorings Proceedings of the 27th European conference on Object-Oriented Programming, (527-551)
- Cohen J and Ajouli A Practical use of static composition of refactoring operations Proceedings of the 28th Annual ACM Symposium on Applied Computing, (1700-1705)
- Mirakhorli M, Mäder P and Cleland-Huang J Variability points and design pattern usage in architectural tactics Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, (1-11)
- Baar T Improving software engineering education by modeling real-world implementations Proceedings of the 8th edition of the Educators' Symposium, (36-39)
- Fontana F, Ferme V and Spinelli S Investigating the impact of code smells debt on quality code evaluation Proceedings of the Third International Workshop on Managing Technical Debt, (15-22)
- Giunta R, Pappalardo G and Tramontana E AODP Proceedings of the 27th Annual ACM Symposium on Applied Computing, (1243-1250)
- Griffith I, Wahl S and Izurieta C Evolution of legacy system comprehensibility through automated refactoring Proceedings of the International Workshop on Machine Learning Technologies in Software Engineering, (35-42)
- Akiyama M, Hayashi S, Kobayashi T and Saeki M Supporting design model refactoring for improving class responsibility assignment Proceedings of the 14th international conference on Model driven engineering languages and systems, (455-469)
- Clavreul M, Mosser S, Blay-Fornarino M and France R Service-oriented architecture modeling Proceedings of the 14th international conference on Model driven engineering languages and systems, (289-303)
- Smith A and Kulkarni P Localizing globals and statics to make C programs thread-safe Proceedings of the 14th international conference on Compilers, architectures and synthesis for embedded systems, (205-214)
- Tokunaga M, Yoshida N, Yoshioka K, Matsushita M and Inoue K Towards a collection of refactoring patterns based on code clone categorization Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-6)
- Kahlout G Implementing patterns with annotations Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-6)
- Hernandez J, Kubo A, Washizaki H and Yoshiaki F Selection of metrics for predicting the appropriate application of design patterns Proceedings of the 2nd Asian Conference on Pattern Languages of Programs, (1-4)
- Baar T and Kumar P Detecting entry points in java libraries Proceedings of the 8th international conference on Perspectives of System Informatics, (42-54)
- Steimann F and Stolz F Refactoring to role objects Proceedings of the 33rd International Conference on Software Engineering, (441-450)
- Schäfer M, Sridharan M, Dolby J and Tip F Refactoring Java programs for flexible locking Proceedings of the 33rd International Conference on Software Engineering, (71-80)
- Tip F, Fuhrer R, Kieżun A, Ernst M, Balaban I and De Sutter B (2011). Refactoring using type constraints, ACM Transactions on Programming Languages and Systems, 33:3, (1-47), Online publication date: 1-Apr-2011.
- Schaefer M and de Moor O (2010). Specifying and implementing refactorings, ACM SIGPLAN Notices, 45:10, (286-301), Online publication date: 17-Oct-2010.
- Schaefer M and de Moor O Specifying and implementing refactorings Proceedings of the ACM international conference on Object oriented programming systems languages and applications, (286-301)
- Köppe C Observations on the observer pattern Proceedings of the 17th Conference on Pattern Languages of Programs, (1-14)
- Pereira D, Lima G and Kulesza U Architecting and modularizing web information systems using design patterns Proceedings of the 8th Latin American Conference on Pattern Languages of Programs, (1-16)
- Khatchadourian R and Muskalla B Enumeration refactoring Proceedings of the 25th IEEE/ACM International Conference on Automated Software Engineering, (181-182)
- Savidis A and Stephanidis C Software refactoring process for adaptive user-interface composition Proceedings of the 2nd ACM SIGCHI symposium on Engineering interactive computing systems, (19-28)
- Counsell S, Hierons R, Hamza H, Black S and Durrand M Is a strategy for code smell assessment long overdue? Proceedings of the 2010 ICSE Workshop on Emerging Trends in Software Metrics, (32-38)
- Riehle D Design pattern density defined Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, (469-480)
- Riehle D (2009). Design pattern density defined, ACM SIGPLAN Notices, 44:10, (469-480), Online publication date: 25-Oct-2009.
- Pérez J and Crespo Y Perspectives on automated correction of bad smells Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops, (99-108)
- Bernardi M and Di Lucca G A role-based crosscutting concerns mining approach to evolve Java systems towards AOP Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops, (63-72)
- Hafiz M and Johnson R Improving perimeter security with security-oriented program transformations Proceedings of the 2009 ICSE Workshop on Software Engineering for Secure Systems, (61-67)
- Piveta E, Pimenta M, Araújo J, Moreira A, Guerreiro P and Price R Representing refactoring opportunities Proceedings of the 2009 ACM symposium on Applied Computing, (1867-1872)
- Abadi A, Ettinger R and Feldman Y Re-approaching the refactoring Rubicon Proceedings of the 2nd Workshop on Refactoring Tools, (1-4)
- Schulze S, Kuhlemann M and Rosenmüller M Towards a refactoring guideline using code clone classification Proceedings of the 2nd Workshop on Refactoring Tools, (1-4)
- Şavga I, Rudolf M, Götz S and Aßmann U Practical refactoring-based framework upgrade Proceedings of the 7th international conference on Generative programming and component engineering, (171-180)
- Welicki L, Yoder J and Wirfs-Brock R The dynamic factory pattern Proceedings of the 15th Conference on Pattern Languages of Programs, (1-7)
- Khomh F and Guéhéneuc Y DEQUALITE Proceedings of the 15th Conference on Pattern Languages of Programs, (1-7)
- Hamza H, Counsell S, Hall T and Loizou G Code smell eradication and associated refactoring Proceedings of the 2nd conference on European computing conference, (102-107)
- Guerra E, de Lara J and Díaz P (2008). Visual specification of measurements and redesigns for domain specific visual languages, Journal of Visual Languages and Computing, 19:3, (399-425), Online publication date: 1-Jun-2008.
- Olsina L, Rossi G, Garrido A, Distante D and Canfora G Incremental quality improvement in web applications using web model refactoring Proceedings of the 2007 international conference on Web information systems engineering, (411-422)
- Monteiro M and Aguiar A Patterns for refactoring to aspects Proceedings of the 14th Conference on Pattern Languages of Programs, (1-10)
- Counsell S and Hierons R Refactoring test suites versus test behaviour Fourth international workshop on Software quality assurance: in conjunction with the 6th ESEC/FSE joint meeting, (31-38)
- Tip F Refactoring using type constraints Proceedings of the 14th international conference on Static Analysis, (1-17)
- Rech J and Schäfer W (2007). Visual support of software engineers during development and maintenance, ACM SIGSOFT Software Engineering Notes, 32:2, (1-3), Online publication date: 1-Mar-2007.
- Ng T, Cheung S, Chan W and Yu Y Work experience versus refactoring to design patterns Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering, (12-22)
- Kim S and Carrington D A tool for a formal pattern modeling language Proceedings of the 8th international conference on Formal Methods and Software Engineering, (568-587)
- Cinnéide M and Fagan P Design patterns Proceedings of the 2006 conference on Pattern languages of programs, (1-9)
- Counsell S, Hassoun Y, Loizou G and Najjar R Common refactorings, a dependency graph and some code smells Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering, (288-296)
- Counsell S, Swift S, Tucker A and Mendes E (2006). Object-oriented cohesion subjectivity amongst experienced and novice developers, ACM SIGSOFT Software Engineering Notes, 31:5, (1-10), Online publication date: 1-Sep-2006.
- Juillerat N and Hirsbrunner B FOOD Proceedings of the 2006 conference on New Trends in Software Methodologies, Tools and Techniques: Proceedings of the fifth SoMeT_06, (452-461)
- Verbaere M, Ettinger R and de Moor O JunGL Proceedings of the 28th international conference on Software engineering, (172-181)
- Advani D, Hassoun Y and Counsell S Extracting refactoring trends from open-source software and a possible solution to the 'related refactoring' conundrum Proceedings of the 2006 ACM symposium on Applied computing, (1713-1720)
- Monteiro M and Fernandes J Towards a catalogue of refactorings and code smells for aspectj Transactions on Aspect-Oriented Software Development I, (214-258)
- Balaban I, Tip F and Fuhrer R Refactoring support for class library migration Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (265-279)
- Balaban I, Tip F and Fuhrer R (2005). Refactoring support for class library migration, ACM SIGPLAN Notices, 40:10, (265-279), Online publication date: 12-Oct-2005.
- Henkel J and Diwan A CatchUp! Proceedings of the 27th international conference on Software engineering, (274-283)
- Monteiro M and Fernandes J Towards a catalog of aspect-oriented refactorings Proceedings of the 4th international conference on Aspect-oriented software development, (111-122)
- Beznosov K and Kruchten P Towards agile security assurance Proceedings of the 2004 workshop on New security paradigms, (47-54)
- Rajesh J and Janakiram D JIAD Proceedings of the 6th ACM SIGPLAN international conference on Principles and practice of declarative programming, (227-237)
- Jones J and Smith R Automated auditing of design principle adherence Proceedings of the 42nd annual ACM Southeast Conference, (158-159)
- Zannier C Tool support for refactoring to design patterns Companion of the 17th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (122-123)
- Maurer F and Martel S (2002). Extreme Programming, IEEE Internet Computing, 6:1, (86-90), Online publication date: 1-Jan-2002.
Index Terms
- Refactoring to Patterns
Recommendations
Tool support for refactoring to design patterns
OOPSLA '02: Companion of the 17th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applicationsUsing design patterns improves the maintainability of software systems. Applying patterns often implies upfront design while Agile Methods rely on software architecture to emerge. We bridge this gap by applying refactoring towards patterns to improve ...
Patterns for refactoring to aspects: an incipient pattern language
PLOP '07: Proceedings of the 14th Conference on Pattern Languages of ProgramsAspect-Oriented Programming is an emerging programming paradigm providing novel constructs that eliminate code scattering and tangling by modularizing crosscutting concerns in their own aspect modules. Many current aspect-oriented languages are ...